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

scala – 使用Actors时在何处定义case类

发布时间:2020-12-16 10:08:17 所属栏目:安全 来源:网络整理
导读:我用 scala给出了我的第一步. 我创建了一个PhotosLoaderActor,它将负责下载图像并将其保存到缓存中.为此,我将有一个CacheActor和一个DownloadActor. 我的PhotosLoaderActor有这个: override def act() { loop { react { case (caller : Actor,photoToLoad:S
我用 scala给出了我的第一步.

我创建了一个PhotosLoaderActor,它将负责下载图像并将其保存到缓存中.为此,我将有一个CacheActor和一个DownloadActor.

我的PhotosLoaderActor有这个:

override def act() {
  loop {
    react {
      case (caller : Actor,photoToLoad:String) => { // bla bla }

我刚学会了我可以使用case类来使用这样的东西:

case class LoadImage(caller: Actor,photoToLoad: String)
override def act() {
  loop {
    react {
      case LoadImage(caller,photoToLoad) => { // bla bla }

我的问题是:

我应该在哪里定义案例类?
如果我从另一个包调用PhotosLoaderActor,导入actor还会导入case类?哪种是最佳做法?

解决方法

我尝试了一些不同的方法,并决定将所有相关的消息放入一个对象,通常命名为XyzProtocol.

例如:

object PhotoProtocol {
  case class LoadImage(caller: Actor,photoToLoad: String)
  case class UpdateCache(photoToLoad: String,photo: Photo)
  case object ClearCache
}

我喜欢这种方法有几个原因:

>在IDE或ScalaDoc中扫描包含的包只显示一个或几个XyzProtocol对象,而不是乱丢几十条消息.
>如果处理消息所需的参与者数量随时间而变化(例如,引入actor池或间接到另一个actor子树),则不会影响消息.
>没有意外捕获actor实例,就像在actor类中定义case类时一样.这种意外捕获足以让我永远不会在actor类中定义case类.

注意:如果消息纯粹是actor的内部实现细节(例如,自身发送给自身的内部信号),我在actor类的伴随对象中定义消息.

PS.我还建议从标准图书馆演员那里搬到Akka. Akka将被添加到Scala 2.10发行版中.

(编辑:李大同)

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

    推荐文章
      热点阅读