非演員類發送一個同步消息,演員是這樣的:如何發送斯卡拉演員內延遲響應
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