2017-03-06 7 views
1

に送信者ActorRefで動作するようにどのように、私はこのコードよりも学んだ:送信者は()関数であり、前に誰かがよい適用されるためは長い時間前にアッカ

def doSome(ref: ActorRef, msg: AnyRef): Unit = { 
    ... some routine ... 

    ref ! msg 
} 

def receive = { 
    case x: Foo => doSome(sender(), x) 
} 

... 

def receive = { 
    case x: Foo => 
    val s = sender() 
    doSome(s, x) 
} 

でなければなりませんcontext.sender()の値を変更してください

質問1:未来機能はありますか?または最初の変種のように書くのは安全ですか?

質問2:このような書き込み方法はありますか?

def receive = { 
    case x: Foo => sendrer() {s => doSome(s, x)} 
} 
+0

「非今後の機能のための真実はありますか?」あなたは将来を返す俳優の中に機能を持っていますか? – britter

答えて

2

sender()の結果は、指定されたメッセージの受信動作が実行されている限り同じままです。はい、限り、あなた

  1. あなたの役者内のフィールドにsender()から返された値を割り当てないように第1の変種のようにそれを行うには、保存されています。だからあなたの最初の質問に答えるために

    その値をあなたの俳優の外のどこかに渡します

しかし、sender()の結果を変数に代入することはお勧めできません。むしろそれよりも、私はsender()を呼び出し、直接にメッセージを送信することをお勧めしたい(これは2に疑問を私の答えになり):あなたがでどういう

def receive = { 
    case x: Foo => doSome(x) 
} 

def doSome(msg: Foo) = { 
    // your logic here 
    sender() ! msg 
} 
関連する問題