Scala akka:在receive函数中声明一个全局变量

时间:2016-06-17 13:02:46

标签: scala functional-programming akka

我想在Actor收到一些消息时声明一个全局变量,这是我的代码,它可以工作。问:我可以使用不可变变量来实现吗?

case class Start(configs:JobConfig)
trait Job extends Actor with ActorLogging {
  //use "val" instead
  private var confMap:Map[String,String]=Map()
  def receive = {
    case Start(conf) => {
      confMap = conf.properties
      init()
    }
      case x => log.debug("Got: " + x)
  }

  final def getProperties():Map[String,String]={
    confMap
  }

  def init()

}

1 个答案:

答案 0 :(得分:1)

当然你可以,但是如果你的init使用confMap它应该将地图作为参数:

...
def receive(confMap:Map[String,String] = Map()) = {
  case Start(conf) => 
    init(conf.properties)
    context.become(receive(conf.properties))
  case ...

您可以找到更多信息here