を使用し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))
}
}