加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

斯卡拉 – 组成演员

发布时间: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,不是吗? – 你只想修改传入的函数).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读