プログラミング言語 Scala 7冊目at TECH
プログラミング言語 Scala 7冊目 - 暇つぶし2ch798:デフォルトの名無しさん
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
}


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch