Ich habe eine Listenable/Listener-Eigenschaft implementiert, die zu Actors hinzugefügt werden kann. Ich frage mich, ob es möglich ist, diese Art von Merkmal an einen Schauspieler anhängen, ohne dass es explizit die listenerHandler Methode aufrufen muss?Komponieren von Schauspielern
Auch ich hatte erwartet, diese Funktionalität in der Akka-Bibliothek zu finden. Fehle ich etwas oder gibt es einen Grund, dass Akka das nicht mit einschließt?
trait Listenable { this: Actor =>
private var listeners: List[Actor] = Nil
protected def listenerHandler: PartialFunction[Any, Unit] = {
case AddListener(who) => listeners = who :: listeners
}
protected def notifyListeners(event: Any) = {
listeners.foreach(_.send(event))
}
}
class SomeActor extends Actor with Listenable
{
def receive = listenerHandler orElse {
case Start => notifyListeners(Started())
case Stop => notifyListeners(Stopped())
}
}
Nun ist das die Sache, die ich in beiden Fällen würde sich daran zu erinnern eit zu nennen ihr super.receive oder * listenerHanlder *. Ich habe mich gefragt, ob es einen Mechanismus in Scala im Allgemeinen oder in einer der Actor-Bibliotheken gab, der dem Darsteller erlaubte, nichts zu tun, außer zu sagen: * mit Listenable * –
Aber Sie müssten nur 'extends ListenableActor' sagen anstelle von 'extends Actor'; in "ListenableActor" hättest du 'receive' (und vermutlich' receiveWithin') bereits überschrieben. Siehe auch Daniels Antwort. –