如何在scala中正确使用akka actor

时间:2013-06-20 07:33:03

标签: scala akka actor

我对演员的想法比较陌生,并且想知道我是否可以对我正在做的事情进行批评。对于项目的一部分,我需要有一个演员,告诉听众演员的时间。必须能够将倾听演员添加到此演员。

目前我有这个:

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 actors)以使其更具功能性?

2 个答案:

答案 0 :(得分: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)
  }
}

答案 1 :(得分:1)

Scala的优势在于它与OO和Functional编程的混合,scala开发人员不需要讨厌var,如果你这样做,你可能需要选择Haskell。

在您的情况下,我认为您唯一需要改变的是将actors设为private