我已經實現了一個可以添加到Actor的Listenable/Listener特質。我想知道是否可以將這種風格的特質附加到演員身上,而不必明確地調用監聽器處理器方法?創作演員
此外,我期待在Akka庫中找到這個功能。我是否錯過了某些東西,或者有什麼原因讓阿卡不會包含這個?
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())
}
}
嗯,這是東西,在這兩種情況下,我會記得打電話EIT她的super.receive或* listenerHanlder *。我想知道在Scala中是否有一種機制,或者是任何允許演員實現Listenable的Actor庫都不需要執行任何操作,只需說出:* with Listenable * – 2010-03-09 22:11:35
但是,您只需要說'extends ListenableActor'而不是'擴展Actor';在'ListenableActor'裏面,你已經重寫了'receive'(並且可能是'receiveWithin')。又見但以理的回答。 – 2010-03-10 15:02:02