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.

questionAnswers(4)

yourAnswerToTheQuestion