我是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 ?
答案 0 :(得分:0)
ActorRef
而不是演员。这是从ActorSystem
def receive = ...
所以删除围绕它的act
和loop
仪式