Scala演员消息:Ping Pong示例

时间:2015-03-23 20:49:29

标签: scala messaging actor

我是Scala和Actors的新手。所以,我有点困惑。我使用的第一个任务是乒乓球示例。 代码如下所示

class PingPong(sendTo: Actor, val name: String) extends Actor {
  def act {
   loop {
     receive {
        case x:Int =>
          println(name + " received " + x)
          Thread.sleep(500)
          if (sendTo == null)
            sender ! (x+1)
          else
            sendTo ! (x+1)
      }
    }
  }
} 

object PingPongMain extends App {
  val pong = new PingPong(null, "pong")
  val ping = new PingPong(pong, "ping")
  ping.start()
  pong.start()
  ping ! 0
}

输出为
ping收到0
pong收到1
...

那么,如何评估呢? 到目前为止,我知道.start()调用act()。
那之后会发生什么? ping! 0被调用。这是否意味着将0发送到ping实例化的地址?它会调用行为吗?如果有多种方法怎么办? 但是pong怎么叫?我的意思是它如何知道sendTo在哪里?

此外,是否可以通过类似的方式执行此操作 val ping / pong = actor {}而不是 extends Actor

1 个答案:

答案 0 :(得分:0)

  • 你应该传递ActorRef而不是演员。这是从ActorSystem
  • 解决的
  • 每个演员只需要定义def receive = ...所以删除围绕它的actloop仪式
  • 没有必要启动演员。当你从ActorSystem获得actorRef时会自动发生。
  • 扩展演员特质。我从来没有见过它。