Às vezes, ao escrever atores Akka, você deseja misturar características que também lidam com as mensagens recebidas. O problema é que, se você definir Actor.receive em um traço, não poderá mais defini-lo em traços.
Para resolver isso, pode-se definir um atributo Receiving que encadeia várias funções de recebimento usando orElse:
trait Receiving {
var receivers = Actor.emptyBehavior
def receiver(next: Actor.Receive) { receivers = receivers orElse next }
def receive = receivers // Actor.receive definition
}
Usar isso em atores com características é fácil:
trait Handler extends Receiving {
receiver {
case Handle => /* I'm the first to handle messages */
}
}
class MyActor extends Handler with Receiving {
receiver {
case SomeMessage => /* Handler didn't handle, I receive the message */
}
}
Soluções alternativas disponíveis nos documentos