Como usar o padrão de traços empilháveis com atores Akka?
Eu estou tentando implementar um traço Pub / Sub para misturar em outros atores akka usando um traço empilhável.
Aqui está o que eu criei:
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) => /* ... */
}
}
Nesse ponto, o compilador retorna um erro: error: sobrescrevendo o método receive no método MyActor do trait ... recebe os modificadores `abstract override '.
Você pode me explicar por que isso não está funcionando? Como posso consertar isso para que funcione?
Obrigado!
ATUALIZAR
Os seguintes trabalhos:
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
Mas por que? Por que posso obter o comportamento que quero desse jeito, mas não o outro? Alguma razăo? Eu não consigo descobrir a diferença subjacente entre essas duas amostras que faz a diferença.