を使用しAkka 2.1.0て、あるアクター ( ActorA) から別の ( ActorB) にメッセージを送信し、返されるメッセージがOption[(String, String)]. ActorBには val が an として定義されておりEnumeration、これが結果の 2 番目の要素として返されTupleます。
ActorAパターンを使用しAwait.result().asInstanceOf[Option[(String, String)](これが悪いブロッキング動作であることはわかっていますが、これが私が見ている動作を説明しているとは思いません)、結果を val に割り当てます。Tuple後で結果の 2 番目の要素を取り出そうとすると、scala.Enumeration#Val cannot be cast to java.lang.Stringキャスト例外が発生します。これは以前のバージョンでAkkaは表示されませんでしAkka 2.1.0たAwait.result。ここで何が起こっているのか誰でも説明できますか?
object MyEnumeration extends Enumeration {
type Enum = Value
val Foo = Value("foo")
val Bar = Value("bar")
}
case class ActorA extends Actor {
implicit val timeout = Timeout(10000)
val result = Await.result((ActorB ? MyMessage), timeout.duration).asInstanceOf[Option[(String, String)]]
val validResult = result.get
val validType = validResult._2 // this is of type Enumeration#Val not String
}
case class ActorB extends Actor {
def myType = MyEnumeration.Foo
def receive = {
case MyMessage =>
sender ! Option((validString, myType))
}
}