Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala参与者消息传递:乒乓球示例_Scala_Messaging_Actor - Fatal编程技术网

Scala参与者消息传递:乒乓球示例

Scala参与者消息传递:乒乓球示例,scala,messaging,actor,Scala,Messaging,Actor,我对Scala和演员都是新手。所以,我有点困惑。我处理的第一个任务是乒乓球示例。 代码如下所示 class PingPong(sendTo: Actor, val name: String) extends Actor { def act { loop { receive { case x:Int => println(name + " received " + x) Thread.sleep(500)

我对Scala和演员都是新手。所以,我有点困惑。我处理的第一个任务是乒乓球示例。 代码如下所示

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
}
输出为 平收到0 pong收到1份

那么,它是如何评估的呢? 到目前为止,我知道。启动呼叫法案。 之后会发生什么? 发出砰的声响!0被调用。这是否意味着0被发送到实例化ping的地址?那它叫act吗?如果有不止一种方法呢? 但是pong是怎么被叫来的呢?我是说它怎么知道sendTo在哪

还有,有没有可能用类似于 val ping/pong=actor{}而不是使用extensed actor

你应该传给演员而不是演员。从ActorSystem中解析的 每个参与者只需要定义def receive=。。。所以,把这个动作去掉,然后绕着它转一圈 没有必要启动演员。当您从ActorSystem获取actorRef时,它将自动发生。 扩展演员的特质。我从来没有见过用另一种方式。
Scala Actors不受欢迎,请使用Akka Actors。但您能否解释一下,上面的代码是如何工作的?正如@Ryan所说,这些是Scala Actors吗?Akka现在是Scala的官方参与者框架。