私はこれを再現しようとしていますexample。 すべてはコンパイルが、私はそれを実行すると、すべての私の結果は次のようになります。ここではアクターが発信者にメッセージを送り返す方法を教えてください。
scala> NameResolver ! ("www.scala-lang.org", self)
scala> self.receiveWithin(0) { case x => x }
res0: Any = TIMEOUT // and not Some(www.scala-lang.org/128.178.154.102)
scala> NameResolver ! ("wwwwww.scala-lang.org", self)
scala> self.receiveWithin(0) { case x => x }
res1: Any = TIMEOUT // and not None
は私の例です:
import scala.actors._
import scala.actors.Actor._
case class Plus(x: Int, y: Int)
val concurrentCalculator = actor {
while(true)
receive {
case Plus(x, y) => println(x + y)
case (Plus(x, y), caller: Actor) => caller ! (x + y)
}
}
scala> concurrentCalculator ! Plus(2,3)
5
scala> concurrentCalculator ! (Plus(2,3), self)
scala> self.receiveWithin(1000) { case x => x }
res0: Any = TIMEOUT // WTF?
なぜ私の代わりに有効な結果のTIMEOUT
を取得していますか?
Thxたくさん。私が再現しようとした例は、 "Programming in Scala"(または私が質問に直接投稿したリンク)から取り出されたものであり、明らかにREPLを使用しています。 – agilesteel
ああ、はい、私は 'import scala.actors.Actor._'は実際には俳優である' self'というメソッドを定義していることを忘れていました。私の悪い。 –
その本はScala 2.7のために書かれています。各俳優がスレッドを取ってきてくれました。しかしこれはもはや事実ではない。 Scalaはかなり高速に動くターゲットです:) –