Scala演员发件人

时间:2015-05-19 13:28:16

标签: scala actor

  

使用发件人,可以引用发送当前演员最后收到的消息的演员。

请考虑以下代码:

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本身,所以我预计输出为:

  

你好,回到你身边

     

啊?

     

啊?

但输出实际上是:

  

你好,回到你身边

     

啊?

1 个答案:

答案 0 :(得分:4)

在您的示例中,

helloActor ! "hello"

意味着向“helloActor”发送消息“hello”,未指定发件人,因为您不在演员中。

如果您希望helloActor成为发件人,则必须在发送邮件时指定发件人。

helloActor.tell("hello", helloActor)

如果您在调用!时在actor中,则发件人被隐式设置为该actor实例。