[英]How to work with the sender ActorRef in akka
很久以前,我學到了以下代碼:
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)
}
因為sender()是一個函數,在應用之前有人可能會更改context.sender()的值
問題1 :非Future功能是否存在真理? 還是可以像第一個變體一樣安全地編寫?
問題2 :有什么寫法嗎?
def receive = {
case x: Foo => sendrer() {s => doSome(s, x)}
}
只要執行給定消息的接收行為, sender()
的結果將保持不變。
因此,請回答您的第一個問題:是的,只要您願意,就可以像第一個變體一樣安全地進行操作
sender()
返回的值分配給actor內的字段 但是,我不建議將sender()
的結果分配給變量。 相反,我建議調用sender()
並直接向它發送一條消息(這是我對問題2的回答):
def receive = {
case x: Foo => doSome(x)
}
def doSome(msg: Foo) = {
// your logic here
sender() ! msg
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.