トップページ⇒tech
1001コメント329KB

プログラミング言語 Scala 7冊目

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2011/09/04(日) 20:07:34.70
The Scala Programming Language
ttp://www.scala-lang.org/

■リンク集
ttp://sites.google.com/site/scalatohoku/%E5%8B%89%E5%BC%B7%E4%BC%9A%E8%B3%87%E6%96%99

■前スレ
プログラミング言語 Scala 6冊目
ttp://hibari.2ch.net/test/read.cgi/tech/1307416864/

■Scalaの紹介文(さわり)
Scalaは簡潔かつ優雅で型安全な方法でよくあるプログラミングパターンを表現できるように
設計された汎用プログラミング言語です。
Scalaはオブジェクト指向と関数型言語の特徴をスムーズに統合しておりJavaやその他の言語を扱う
プログラマをより生産的にすることができます。(以下略)
ttp://www.scala-lang.org/node/25

■Scalaに関する書籍(英語)
ttp://www.scala-lang.org/node/959
リファレンスマニュアルや草稿のPDFなども充実しているのでそちらも参照してください。
日本語の資料には、チュートリアルの訳やIBM dW、IT Proの連載記事、各々で開かれた勉強会の資料などがあります。
0809デフォルトの名無しさん2012/01/22(日) 17:23:25.32
>>808
Thanks! 完璧に求めている答えでした。
でも、ということは、list = x :: list というのは略記できないってことなんだね・・・
0810デフォルトの名無しさん2012/01/22(日) 17:34:17.10
>>809
list = x :: list は

list = list.::(x) って意味なので

list ::= x と書ける

けど正直分かりにくいと思う
0811デフォルトの名無しさん2012/01/23(月) 23:23:20.50
printfは使えるのに、Console.err.printfは
overloaded method value printf with alternatives: ・・・
とか言われて、使えん。なぜ?

format()とか付ければ回避できるけど、タイプ数がもったいない。
0812デフォルトの名無しさん2012/01/24(火) 01:21:53.52
メッセージの通りだよ
引数に渡してるものの型が定義に合ってない

def printf(String, Object*): PrintStream
def printf(java.util.Locale, String, Object*): PrintStream

Object(AnyRef)の可変長引数だからIntとかはそのまま渡せないね
0813デフォルトの名無しさん2012/01/24(火) 02:46:24.22
>>812
なんてこった!Predef.printfはAny*だったから動いてたのか!
可変引数にはautoboxingかからないんだな。
またひとつ賢くなっちまったぜ。
さんきゆーふれんず
0814デフォルトの名無しさん2012/01/28(土) 20:27:00.75
  テスト テスト
0815デフォルトの名無しさん2012/01/28(土) 20:32:18.25
以下のソースで、access()の中でnofifyListenersを実行して、その中では各リスナー(Actor)にChangedというメッセージを送っているけど、
これってリスナーのメールボックスにメッセージを送るだけで、処理が終わるのを待たずに次の行のcount += 1が実行されるという認識で大丈夫ですか?

case class Add(who:Actor)
case class Changed(what:AFoo, count:Int)
case object Access

class AFoo extends Actor {
private var listeners:List[Actor] = Nil
private var count = 0

def act = loop {
react {
case Add(who) => listeners = who :: listeners
case Access => access()
}
}

private def access() = {
notifyListeners
count += 1
}

private def notifyListeners() = {
listeners.foreach( a => a ! Changed(this, count))
}
}
0816デフォルトの名無しさん2012/01/28(土) 20:35:05.97
半角スペースになっちゃった
ソースの続き

class AFooListener(afoo:AFoo) extends Actor {
  afoo ! Add(this)

  def act = loop {
    react {
      case Changed(f, cnt) => changed(f, cnt)
    }
  }

  def changed(eventFrom:AFoo, count:Int) :Unit = {
    if (count < 10) eventFrom ! Access
  }
}
0817デフォルトの名無しさん2012/01/28(土) 21:14:17.52
そういえばActorにJavaからメッセージを送るにはどうすればいいんだろう?
08188152012/01/28(土) 21:54:53.55
>>817
俺が答えるのもあれだけど、ラッパーメソッド?的なモノを用意すればいいんじゃない?

// コイツをJavaから実行
def sendFromJava(s:String) = {
  actor ! s
}
0819デフォルトの名無しさん2012/02/05(日) 00:58:20.47
クロージャをサポートしているオブジェクト指向言語での、yieldの存在意義がよくわからない。
0820デフォルトの名無しさん2012/02/05(日) 07:16:14.63
>>819
クロージャって yield の代替になるの?
0821デフォルトの名無しさん2012/02/05(日) 10:08:09.19
継続ならyield実装できるけど、クロージャではな。
0822デフォルトの名無しさん2012/02/05(日) 16:34:11.09
このスレの278のサンプルだが、こうだ。

(1 to 10).map(i => "a" + i -> i.toString)
for(i <- 1 to 10) yield i => "a" + i -> i.toString

yieldを使わなければ出来なくて、有効なケースってどういうのがあるの?
0823デフォルトの名無しさん2012/02/05(日) 19:07:20.12
>>822
そりゃ、yield じゃなくて for 式が map に置き換えられるって話でしょう。
言語仕様で for 式は他のメソッドに置き換えられて実行されると決まってるのだから、
当然 yield 無しに書けないコードは無い。ただ、そっちのが読み書きしやすいってだけの話。
0824デフォルトの名無しさん2012/02/05(日) 22:58:17.67
scala-androidって使ってる人いないのかな。
今のScala-IDE(eclipseのプラグイン)と組み合わせてちゃんと動く気がしない。
0825デフォルトの名無しさん2012/02/06(月) 04:11:39.24
>>824
sbtのほうは1.7ぐらいの時に動かしてみたけどeclipseは当時ひどくて試してないなー。いま簡単に動くなら試してみたいけどつらそうだね。
0826デフォルトの名無しさん2012/02/07(火) 01:51:04.64
scalas が不可解。 https://github.com/harrah/xsbt/wiki/Scripts
sbt 固有のログがコンソールに出てきて鬱陶しいから次のような感じにしてんだけど、
"[info] Set current project to ..." ってのが最初に出てくる。どうしたらいいの?


#!/usr/bin/env scalas
!#

/***
scalaVersion := "2.9.1"

logLevel := Level.Error
*/

println("hoge")
0827デフォルトの名無しさん2012/02/11(土) 01:30:56.29
スケーラブルで関数型でオブジェクト指向なScala入門
http://www.atmarkit.co.jp/fjava/index/index_scala.html
0828デフォルトの名無しさん2012/02/13(月) 01:12:02.31
最近scala界隈落ち着いちゃったね
0829デフォルトの名無しさん2012/02/13(月) 06:08:17.75
ScalaスレもErlangスレも過疎
0830デフォルトの名無しさん2012/02/13(月) 14:53:13.25
Scalazに走ったあたりでネタ切れ感があったよね
Play2.0でまた活発になるといいね
0831デフォルトの名無しさん2012/02/13(月) 20:42:31.94
scala、非の打ち所が無いまま、安定飛行に入る。
いま、ブレーク前夜に特有の静けさ。
0832デフォルトの名無しさん2012/02/13(月) 21:15:39.79
JVM上じゃなくてHaskellのGHCみたいなのがあったら、話は大分違っていたのだろうか
0833デフォルトの名無しさん2012/02/13(月) 21:21:42.13
ネイティブコンパイラがあったところで状況変わらんでしょ
単に言語のネタとして話すことがなくなってきたというだけでは
0834デフォルトの名無しさん2012/02/13(月) 21:38:57.93
2.10.0-M1とかも出たけど、周辺ツールがバージョン番号で雁字搦めになってて、
試すのも面倒臭いんだよねw
0835デフォルトの名無しさん2012/02/14(火) 07:08:53.98
バイナリのバージョン縛りは厳しいな。依存ライブラリをソースからダウンロードしてコンパイルまで自動化するツールが待たれる。
0836デフォルトの名無しさん2012/02/15(水) 07:07:56.19
Play2.0-RC1来たよ
0837デフォルトの名無しさん2012/02/15(水) 21:49:40.18
Finagleとかもわりと面白い。
0838デフォルトの名無しさん2012/02/15(水) 22:35:47.31
linux環境(CentOS 5)でakkaを試してみたが、別ホストへのメッセージ送信が拒否されてしまう。
iptablesも起動してないのに誰がパケットを遮断してるのか…

分散プログラミングはwindowsの方が楽だな〜
単に自分がlinuxに無知なだけだけど
0839デフォルトの名無しさん2012/02/16(木) 00:14:15.56
別ホストでnc -l -p xxxxってやっといて、telnet xxxx yyy とかでまず繋がってるか試してみては?
0840デフォルトの名無しさん2012/02/16(木) 01:28:18.85
>>839
助言サンクス

838のあと、自前でポートスキャナを書いてチェックしてみたんだけど
同ホスト内でスキャンするとアクターの受信待ちポートがみつかるのに
リモートからのスキャンだと見えなかった。

きっとlinuxユーザなら常識的な何かを見落としてるんだと思う。
0841デフォルトの名無しさん2012/02/16(木) 02:06:58.01
netstat -a の結果を貼れ
0842デフォルトの名無しさん2012/02/16(木) 06:06:33.35
Play2.0-RC2来たよ
0843デフォルトの名無しさん2012/02/16(木) 07:28:51.60
そろそろ出るの?
0844デフォルトの名無しさん2012/02/16(木) 22:59:25.85
>839>841
ありがとう。おかげで解決した。

nc -l xxxx 50000で待つ場合と
akkaのアクターで同じポートで待つ場合をnetstatで比較したら、
前者はlocal addressが*:50000、後者はxxxx:50000
になっていた。

どうもakkaではホスト名で登録するとxxxxになるので
IPアドレスを直接指定しないと駄目みたい。
0845デフォルトの名無しさん2012/02/16(木) 23:29:40.95
インターフェース固定でacceptかよ。だっさ。> akka
0846デフォルトの名無しさん2012/02/18(土) 07:51:45.20
教えてください。
Javaで以下のようなBuilderパターンの実装があります。
Builderオブジェクトはサイズが大きいので
Builder.Resultオブジェクトを利用するときには解放したいのです。

|class Builder {
| static class Result {...}
| Result build() {...}
|}

それをScalaで実現するにはどうすればいいでしょうか?
(結果の型はBuilder.Resultにしたいという制約があります)

以下のようにすると、Builder.Resultオブジェクトが
Builderへの参照を持ってしまいます。

|class Builder {
| class Result {...}
| def build(): Result = {...}
|}

以下のようにすると、Builderへの参照は持ちませんが、
せっかく関数型言語にしたのに冗長ですし、
関連のあるコードが遠くに離れてしまい、保守性を低下させます。

|class Builder {
| def build(): Result = {...}
|}
|object Builder {
| class Result {...}
|}
0847デフォルトの名無しさん2012/02/18(土) 14:29:55.90
object Builder {
class Result {...}
class Builder {
def build(): Result = {...}
}
}
0848デフォルトの名無しさん2012/02/19(日) 21:16:55.37
- Javaのデザインパターンはバッドノウハウ
- Resultってクラス名が本質的な意味を持っているとは思えない
- Builderと言っている機能はコンパニオンオブジェクトで実現可能
0849デフォルトの名無しさん2012/02/19(日) 21:31:04.34
Javaのクラスx.y.Cに対して

type A = x.y.C

みたいな感じで,クラスの別名を定義できますが,
x.y.CのstaticメンバをA.fと参照することはできないようです。

importせずになんとか別名経由で参照する方法はないでしょうか?
0850デフォルトの名無しさん2012/02/20(月) 07:56:55.86
>>849
可視性が通ってないんじゃないの。
0851デフォルトの名無しさん2012/02/20(月) 12:18:11.84
Effective Scala - Twitterのベストプラクティス
http://www.infoq.com/jp/news/2012/02/twitter-effective-scala
0852デフォルトの名無しさん2012/02/20(月) 21:02:04.89
play2.0RC2でデフォルトの9000番からポート変更するのってどうやるんですかね?
stackoverflowに同じ質問があったんですがうまく設定できない…
0853デフォルトの名無しさん2012/02/22(水) 21:40:06.57
Function数字.scalaとか
Product数字.scalaとか
Tuple数字.scalaとか
何でこんな名前なの?
0854デフォルトの名無しさん2012/02/22(水) 21:57:18.03
scalaは型引数が違うだけの同じ名前のクラスは定義できないから
08558532012/02/23(木) 20:04:55.98
あーそれで数字が増えるに従って型引数も増やしてるってだけなんだね
マトモに中身見ずに聞いてました、ありがとう
0856デフォルトの名無しさん2012/02/24(金) 01:39:58.18
動物本プログラミングscalaの1.5並行処理の味見、scala -cp . shapes-actor-script.scala
実行しても待たされた挙句に何も出力しないで帰って来る。

なんでじゃああああああw
0857デフォルトの名無しさん2012/02/24(金) 07:41:21.76
なんか打ち間違えてるんじゃないのw
0858デフォルトの名無しさん2012/02/24(金) 09:39:32.13
>>856
remoteでないのなら単純な理由だろうな〜
start()叩いてないとか?
08598562012/02/24(金) 12:03:39.32
start()は入ってました。shapes-actor-script.scalaそのまま。
打ち間違いは今のところ見当たらず。
-cpのパスを故意に別のパスにするとShapeDrawingActorがMissing dependencyだって文句言ってくるから
scalacしたクラスファイルは読み込んでると思う。

ノワワーン

>>858
「remoteでないのなら」ってのはどういうことですか?
08608562012/02/24(金) 12:15:47.72
オラからソースダウンロードして実行しても同じ結果でした。
こりゃ環境の問題でしょうね(Fedora16上でやってます)。
0861デフォルトの名無しさん2012/02/24(金) 12:41:38.80
>>859
動物本を読んだ事が分からないんだけど、それってリモートアクター?
そうならば通信がどっかて止まっているのかも。
0862デフォルトの名無しさん2012/02/24(金) 21:59:24.90
selinuxの問題だろw
0863デフォルトの名無しさん2012/02/25(土) 15:14:47.46
暗黙のパラメータはimplicitを関数の引数リストの先頭に書くことで実現できますが、
何故引数一つ一つに付けられないようにされているのでしょうか?
0864デフォルトの名無しさん2012/02/25(土) 15:27:37.71
逆になんで一つ一つに付けたいと思うのか
08658562012/02/25(土) 20:00:25.88
>>862
これは私の話のことですか?
気になったので一応/etc/selinux/configでSELINUX=disabledをセットして試してみましたが、変わりませんでした。
0866デフォルトの名無しさん2012/02/25(土) 20:15:03.13
>>865
そもそもリモートアクターなの?
0867デフォルトの名無しさん2012/02/26(日) 01:41:53.76
Scala IDE 2.0 - リファクタリングサポートを追加
http://www.infoq.com/jp/news/2012/02/scala-ide
0868デフォルトの名無しさん2012/03/01(木) 21:47:44.67
Play2.0-RC3来てるよ
0869デフォルトの名無しさん2012/03/01(木) 22:54:36.77
な、な、なんだって
0870デフォルトの名無しさん2012/03/02(金) 05:57:39.07
PlayのRCは昔のScalaのRC並に信用できないね
0871デフォルトの名無しさん2012/03/02(金) 09:16:36.33
2.8.0がRC7くらいまで行った時は吹いた
0872デフォルトの名無しさん2012/03/02(金) 10:15:32.23
scala系は、バグなければリリースがRCではなく、機能追加が止まるのがRCだっけ?
0873デフォルトの名無しさん2012/03/02(金) 10:30:09.10
http://www.playframework.org/2.0#features
https://play.lighthouseapp.com/projects/82401/milestones/122723-20
https://play.lighthouseapp.com/projects/82401-play-20/overview
1系から2系に足りないやつ持ってきて追加してるフェーズ?
0874デフォルトの名無しさん2012/03/05(月) 22:02:23.85
2.9.1-1
0875デフォルトの名無しさん2012/03/05(月) 22:29:49.80
はい
0876顕正新聞 平成24年2月5日号「原発全廃特集号」2012/03/06(火) 09:43:52.73

・原発は日本を滅ぼす、即時全廃せよ

・六ヶ所村再処理工場直下に二つの活断層

・耐震基準450ガルと、著しく耐震性に欠ける施設

・大事故が起きたらチェルノブイリを遥かに越す未曽有の大惨事が

・代替は天然ガス・コンバインドサイクルで十分

http://d.hatena.ne.jp/kensho01/20120208/1328718592
0877デフォルトの名無しさん2012/03/07(水) 00:38:57.12
最近、このScalaスレ過疎っているけど、どうしたの?

単に主要人物が2chから離れているだけ?
東京とか名古屋とか仙台とかのScala勉強会は盛況?
0878デフォルトの名無しさん2012/03/07(水) 04:53:01.94
さすがに話題がつきているのではないかな
言語仕様的には2.9って2.8とほとんど変わってないから、ずっと2.8時代が続いているようなもんなんだよな
2009年のBetaで盛り上がってるころからずっと同じ言語を見てると思うとさすがに言語ウォッチャー的には飽きてくる
0879デフォルトの名無しさん2012/03/07(水) 08:43:19.70
応用に至ってデカイものを仕込んでるんじゃね?
0880デフォルトの名無しさん2012/03/07(水) 11:58:41.32
ライブラリの話でもすれば良いのではなかろうか。
0881デフォルトの名無しさん2012/03/07(水) 12:08:53.07
akkaのFSMってActor.context.becomeで置き換え可能かな?
0882デフォルトの名無しさん2012/03/08(木) 12:24:36.67
Akka 2.0出てるね
0883デフォルトの名無しさん2012/03/09(金) 21:06:57.12
abstract classとtraitの違いって
コンストラクタが持てるかどうかだけですか?
0884デフォルトの名無しさん2012/03/09(金) 23:13:32.84
いいえ
0885デフォルトの名無しさん2012/03/12(月) 06:19:24.03
はい
0886デフォルトの名無しさん2012/03/14(水) 07:18:37.89
文字列に変数埋め込む方法はないんでしょうか?
軽くググッたらXMLリテラル使うといいかもっていうふざけた答えがみつかりましたw

標準ライブラリにはないとしても、例えばJavaでいうところのStringUtilsくらいの
メジャーなライブラリで用意されてたりしないんですか?
Javaしか使ったことないんだけど、LL言語で唯一憧れるのが#{foo}みたいな記法
これないと不便ですよね
0887デフォルトの名無しさん2012/03/14(水) 07:30:34.15
あ、String.format() は存じております
文字列リテラル自体がそういう記法に対応してないのかなと思いまして
あ、これだとライブラリにないでしょうかっていう質問がおかしいか…
0888デフォルトの名無しさん2012/03/14(水) 07:44:15.49
うーん、結局Scala界では、こう書けるんだから何も不便しないだろjkって感じでしょうか
"Lv.%d%n攻撃力 %,3d%n防御力 %,3d%n生命力 %,3d".format(lv, atk, deff, hp)
0889デフォルトの名無しさん2012/03/14(水) 07:58:13.59
文字列中の式展開は2.10で入るかもって話だったな
0890デフォルトの名無しさん2012/03/14(水) 09:06:17.02
- 予め整形した文字列同士を + で結合

- $を使ったインデックス参照形式での埋め込み
"SELECT name FROM tbl WHERE id > %1$s AND name LIKE %2$s".format(10, "Tom")

今の所これで事足りてるかな
0891デフォルトの名無しさん2012/03/14(水) 11:57:41.23
みなさんご存知だと思いますが、Play2.0 Finalが出てますよ
0892デフォルトの名無しさん2012/03/14(水) 14:59:55.67
あれ?ほんとだ!なんかサイトも綺麗になってる!
RC信用出来たじゃないですかー!やったー!
0893デフォルトの名無しさん2012/03/14(水) 21:14:04.03
Play2.0のJavaの部分を担当している人は何をモチベーションに作業してるんだろう
誰も使う人なんていないのに
0894デフォルトの名無しさん2012/03/14(水) 23:29:52.84
この言語は何がメリットですか
0895デフォルトの名無しさん2012/03/15(木) 00:03:37.43
使うとクールでクリエイティブなプログラマーになれます
0896デフォルトの名無しさん2012/03/15(木) 00:26:04.58
トレンディということですか?
0897デフォルトの名無しさん2012/03/15(木) 00:30:33.56
はい、そうです
0898デフォルトの名無しさん2012/03/15(木) 01:16:51.85
誰かPlayのIterateeの解説をブログで書いて
0899デフォルトの名無しさん2012/03/15(木) 16:15:17.00
Scalaは仕事で使いますか?
0900デフォルトの名無しさん2012/03/15(木) 17:54:04.01
使ってるよ。
0901デフォルトの名無しさん2012/03/16(金) 00:18:32.90
使えるような手筈を整えてる最中だ。最近ようやくチャンスが巡ってきた感じ。
0902デフォルトの名無しさん2012/03/16(金) 01:27:50.21
うちもそんな感じだ。
使える人、使いたい人も徐々に増えてきた。
0903デフォルトの名無しさん2012/03/16(金) 13:31:41.26
Scalaで物理単位を扱うのに何か良い方法ってありますかね
HaskellのDimensionalのような
0904デフォルトの名無しさん2012/03/17(土) 21:32:26.03
Spark によるデータ分析とパフォーマンス
http://www.ibm.com/developerworks/jp/linux/library/l-sparkdataanalysis/
0905デフォルトの名無しさん2012/03/18(日) 11:27:32.86
http://msdn.microsoft.com/ja-jp/library/dd233243.aspx
F# 単位

http://code.google.com/p/lascala/source/browse/trunk/scala/data/Measure.scala
Scalaだと、こんなのはあった。
0906デフォルトの名無しさん2012/03/19(月) 17:47:32.17
Play2.0のIterateeを理解したい
http://d.hatena.ne.jp/papamitra/20120318/Iteratee

papamitraさんありがとう!
0907デフォルトの名無しさん2012/03/19(月) 23:11:22.07
google summer of code 2012
http://www.scala-lang.org/node/12565
プロジェクト案発表したみたい
0908デフォルトの名無しさん2012/03/20(火) 02:59:57.64
あれScalaってまだオラクルに買収されてないの?
レス数が900を超えています。1000を超えると表示できなくなるよ。