我正在尝试使用可堆叠的特征实现 Pub/Sub 特征以混合到其他 akka 演员中。
这是我想出的:
trait PubSubActor extends Actor {
abstract override def receive =
super.receive orElse {
case Subscribe(topic) => /* ... */
case Publish(topic, msg) => /* ... */
}
}
class MyActor extends Actor with PubSubActor {
override def receive = {
case SomeMessage(a, b, c) => /* ... */
}
}
此时,编译器会抛出一个错误:错误:在 trait MyActor 中覆盖方法接收...方法接收需要 `abstract override' 修饰符。
你能向我解释为什么这不起作用吗?我该如何修复它才能正常工作?
谢谢!
更新
以下作品:
trait PubSubActor extends Actor {
abstract override def receive =
super.receive orElse {
case Subscribe(topic) => /* ... */
case Publish(topic, msg) => /* ... */
}
}
class MyActor extends Actor {
override def receive = {
case SomeMessage(a, b, c) => /* ... */
}
}
class MyActorImpl extends MyActor with PubSubActor
但为什么?为什么我能以这种方式获得我想要的行为,而不能以另一种方式获得?有什么理由吗?我似乎无法弄清楚这两个样本之间产生差异的潜在差异。