使用发件人,可以引用发送当前演员最后收到的消息的演员。
请考虑以下代码:
class HelloActor extends Actor{
def receive = {
case "hello" =>
println("hello back at you")
sender ! "hi"
case _ => println("huh?")
}
}
object Mian extends App{
val system = ActorSystem("helloSystem")
val helloActor = system.actorOf(Props[HelloActor], name = "helloactor")
helloActor ! "hello"
helloActor ! "hey"
system.shutdown
}
我认为sender
也是helloActor
本身,所以我预计输出为:
你好,回到你身边
啊?
啊?
但输出实际上是:
你好,回到你身边
啊?
答案 0 :(得分:4)
在您的示例中,
helloActor ! "hello"
意味着向“helloActor”发送消息“hello”,未指定发件人,因为您不在演员中。
如果您希望helloActor成为发件人,则必须在发送邮件时指定发件人。
helloActor.tell("hello", helloActor)
如果您在调用!
时在actor中,则发件人被隐式设置为该actor实例。