Child1
在此示例中,我有一个创建子类型演员的演员。Child1
构造函数采用两个StringSomeTrait
,它们是从混合到实例中的变量中提取的SomeActor
。
trait SuperTrait {
lazy val str1: Option[String] = None
lazy val str2: Option[String] = None
}
trait SomeTrait extends SuperTrait {
override lazy val str1: Option[String] = Some("Str1")
override lazy val str2: Option[String] = Some("Str2")
}
class SomeActor extends Actor {
this: SuperTrait =>
var child: Option[ActorRef] = None
override def preStart(): Unit = {
child = for {
st1 <- str1
st2 <- str2
} yield context.actorOf(Child1.props(st1, st2)))
}
}
在SomeActor
实例上创建:
context.actorOf(Props[SomeActor with SomeTrait])
有了这个我得到奇怪的错误:
SomeActor cannot be cast to SomeTrait
.
似乎从Option 容器中提取变量SomeTrait
会引发该异常。
我在这里想念什么?
它不仅发生在for comprehension
s 上。此外,当我尝试执行str1.getOrElse("")
或添加吸气剂时SomeTrait
:def getStr1 = str1.getOrElse("")