12/01/21 10:49:33.61
前から思ってたんだけどさ
原監督に似てるよね
799:デフォルトの名無しさん
12/01/21 11:26:40.77
お腹をなんとかしないと
800:デフォルトの名無しさん
12/01/21 12:30:19.71
scalalaもscalaNLPもプロジェクトはもう死んでるのか。
いい数値演算と言語処理のライブラリ/バインディング知らない?
801:デフォルトの名無しさん
12/01/21 16:03:43.37
2.10.0-M1
802:デフォルトの名無しさん
12/01/21 19:38:25.87
2.10って何違うの?
803:デフォルトの名無しさん
12/01/21 23:41:55.01
Scala2.10って、 文字列中の式展開が導入されたんだっけ?
804:デフォルトの名無しさん
12/01/21 23:54:17.85
Included in this release are:
・Preliminary Reflection API
・faster inliner
・scaladoc improvements (Thanks docspree folks!)
・virtualized pattern matcher
・many more!
ってわかんねーよ
805:デフォルトの名無しさん
12/01/22 01:23:44.77
基本的にDSL作者向けがメイン?
806:デフォルトの名無しさん
12/01/22 05:35:08.82
きっとエロイ人が日本語で詳説してくれるに違いない
807:デフォルトの名無しさん
12/01/22 09:35:29.68
var s = immutable.Set[String]()
s += "item"
っていう例で、+=を自動で + とvarへの代入する言語仕様って、
+と-以外の演算子でも有効?
808:デフォルトの名無しさん
12/01/22 14:00:14.07
>>807
メソッド名が演算子のみで構成されてるならなんでもおk
l += rという表記は、
・変数lに入ってるクラスに+=というメソッドがない
・変数lがimplicit conversionで+=というメソッドを持っているクラスに変換できない
・l = l + rが型的に正しい(lがvarで宣言されていて、lがメソッド+を持っている)
以上をすべて満たしてる場合にl = l + rとして再解釈される …って言語仕様の6.12.4に書いてあった
class A(init: String) {
var str = init
def *^-^*(s: String): A = { str += s; this }
}
var l = new A("left")
l *^-^*= "-right"
println(l.str) // => left-right
こんなのでもいける
809:デフォルトの名無しさん
12/01/22 17:23:25.32
>>808
Thanks! 完璧に求めている答えでした。
でも、ということは、list = x :: list というのは略記できないってことなんだね・・・
810:デフォルトの名無しさん
12/01/22 17:34:17.10
>>809
list = x :: list は
list = list.::(x) って意味なので
list ::= x と書ける
けど正直分かりにくいと思う
811:デフォルトの名無しさん
12/01/23 23:23:20.50
printfは使えるのに、Console.err.printfは
overloaded method value printf with alternatives: ・・・
とか言われて、使えん。なぜ?
format()とか付ければ回避できるけど、タイプ数がもったいない。
812:デフォルトの名無しさん
12/01/24 01:21:53.52
メッセージの通りだよ
引数に渡してるものの型が定義に合ってない
def printf(String, Object*): PrintStream
def printf(java.util.Locale, String, Object*): PrintStream
Object(AnyRef)の可変長引数だからIntとかはそのまま渡せないね
813:デフォルトの名無しさん
12/01/24 02:46:24.22
>>812
なんてこった!Predef.printfはAny*だったから動いてたのか!
可変引数にはautoboxingかからないんだな。
またひとつ賢くなっちまったぜ。
さんきゆーふれんず
814:デフォルトの名無しさん
12/01/28 20:27:00.75
テスト テスト
815:デフォルトの名無しさん
12/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))
}
}
816:デフォルトの名無しさん
12/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
}
}
817:デフォルトの名無しさん
12/01/28 21:14:17.52
そういえばActorにJavaからメッセージを送るにはどうすればいいんだろう?
818:815
12/01/28 21:54:53.55
>>817
俺が答えるのもあれだけど、ラッパーメソッド?的なモノを用意すればいいんじゃない?
// コイツをJavaから実行
def sendFromJava(s:String) = {
actor ! s
}