Scala 如何在akka与发送方ActorRef合作
很久以前,我学会了以下代码:Scala 如何在akka与发送方ActorRef合作,scala,akka,higher-order-functions,Scala,Akka,Higher Order Functions,很久以前,我学会了以下代码: 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) } 因
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()是一个函数,在应用之前,有人可能会更改上下文。sender()值
问题1:非未来函数是否成立?还是像第一个变体那样写比较安全
问题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
}