使用Akka 2.1.0
我正在从一个 Actor ( ActorA
) 向另一个Actor ( ) 发送消息,ActorB
并期望返回的消息是Option[(String, String)]
. ActorB
有一个 val 定义为 anEnumeration
并且这将作为Tuple
结果的第二个元素返回。
ActorA
使用Await.result().asInstanceOf[Option[(String, String)]
模式(我知道这是不好的阻塞行为,但不认为这解释了我看到的行为),并将结果分配给 val. 后来,当我尝试提取结果的第二个元素时,Tuple
我得到了一个强制转换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))
}
}