0

我对演员的想法相对较新,我想知道我是否可以对我正在做的事情提出批评。对于项目的一部分,我需要一个演员来告诉一组正在听的演员时间。监听演员必须能够被添加到这个演员。

目前我有这个:

import akka.actor.Actor;

import akka.actor.ActorRef;
import com.github.nscala_time.time.Imports._;

class TimeManager extends Actor {
  var actors:List[ActorRef] = List();
  def receive = {
    case AdvanceTime() => actors foreach (_ ! DateTime.now)
    case AddListener(x) => actors =  x :: actors
  }
}

有什么方法可以从这段代码中删除状态(var actor)以使其更具功能性?

4

2 回答 2

7

您不能删除状态,因为TimeManager应该包含参与者列表。

你可以隐藏它:

class TimeManager extends Actor {
  def receive = getBehavior(Nil)
  def getBehavior(actors: List[ActorRef]): Receive = {
    case AdvanceTime() => actors foreach (_ ! DateTime.now)
    case AddListener(x) => context become getBehavior(x :: actors)
  }
}
于 2013-06-20T08:12:44.140 回答
1

Scala 的优势在于它融合了 OO 和函数式编程,scala 开发人员不需要讨厌var,如果喜欢,您可能需要选择 Haskell。

在你的情况下,我认为你唯一需要改变的actorsprivate

于 2013-07-04T01:08:39.977 回答