2016-06-17 13 views
1

Actorがメッセージを受け取ったときにグローバル変数を宣言したい、ここは自分のコードです。 Q:不変変数を使ってそれを達成できますか?もちろんScala akka:受信関数内でグローバル変数を宣言する

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

のことができますが、あなたのinit使用confMap場合にはparametrとしてマップを取る必要があります。

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

あなたはより多くの情報をあなたのaswerためhere

+0

感謝を見つけることができます。しかし、他の関数でconfMapを使う方法は?どの関数がconfMapを使用するのか分かりません。グローバル変数を宣言する主な理由です。 –

+1

グローバル変数を使用すると、副作用が生じます。機能を孤立してテストすることは困難または時には不可能になります。だから、私はあなたの関数のすべてが 'confMap'をパラメータとして取るべきだと思っています。あるいは、あなたが必要とする全てのメソッドを持ち、' ​​receive'パラメータで使用するクラスを作ることができます。 –

+0

私はそれを得た。ありがとうございました –

関連する問題