斯卡拉 – 组成演员
发布时间:2020-12-16 08:57:57 所属栏目:安全 来源:网络整理
导读:我已经实现了可以添加到Actors的Listenable / Listener特性.我想知道是否有可能将这种特性附加到一个actor而不必显式调用listenerHandler方法? 我也期待在Akka库中找到这个功能.我错过了什么或者是否有某种原因让Akka不会包含这个? trait Listenable { thi
我已经实现了可以添加到Actors的Listenable / Listener特性.我想知道是否有可能将这种特性附加到一个actor而不必显式调用listenerHandler方法?
我也期待在Akka库中找到这个功能.我错过了什么或者是否有某种原因让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()) } } 解决方法
为什么不直接扩展Actor,或者如果你想让非Actors也可以监听,那么创建一个使用Listenable扩展Actor的ListenableActor?
然后你会像上面那样覆盖在Actor中的接收(除了你也想调用super.receive,不是吗? – 你只想修改传入的函数). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读