非演员类发送一个同步消息,演员是这样的:如何发送斯卡拉演员内延迟响应
val response = WorkData !? "hello"
如果我要响应此消息马上,比我会做到这一点:
receive {
case "hello" => reply("world")
}
但是,如果我需要回答一些在未来的时间,比 我如何存储调用参考,并发送后的回答吗?
非演员类发送一个同步消息,演员是这样的:如何发送斯卡拉演员内延迟响应
val response = WorkData !? "hello"
如果我要响应此消息马上,比我会做到这一点:
receive {
case "hello" => reply("world")
}
但是,如果我需要回答一些在未来的时间,比 我如何存储调用参考,并发送后的回答吗?
我通常会存储发件人引用以便稍后使用它。
receive {
case "hello" =>
val otherParty = sender
// more receives, etc
// ...
otherParty ! "world"
}
希望我早些时候见过。谢谢! – pigate 2016-03-21 20:40:24
只是产生一个匿名演员来处理消息并在准备好时做出响应呢?这样接收器就可以充当调度员。这不需要一个可变变量来存储任何东西,因为你在这里使用闭包。
import scala.actors.Actor
import scala.actors.Actor._
case class Message(msg: String)
class MyReceiver extends Actor {
def act() {
react {
case Message(msg) =>
actor {
sender ! process(msg)
}
}
}
def process(msg: String): String =
"Result: " + msg
}
object Main {
def main(args: Array[String]) {
val a = new MyReceiver
a.start()
val res = a !? Message("foo")
println(res)
}
}
问候,raichoo
如果你想在未来的答复,我认为,你需要发送异步消息(不是同步一个以'?!'),并为您的演员最简单的方法在准备就绪时交出回复时,发件人本身也是演员。 – 2011-04-22 14:07:15
不幸的是,我需要大量的重构,才能让发件人成为演员。我认为我可以以某种方式获得发件人的“未来”参考,并使用它发回答案。 – Michael 2011-04-22 17:14:03