下面的代码片段从编程采取斯卡拉'自我'如何在斯卡拉演员中工作?
import actors.Actor
object NameResolver extends Actor {
import java.net.{InetAddress, UnknownHostException}
def act() {
react {
case (name: String, actor: Actor) =>
actor ! getIp(name)
act()
case "EXIT" =>
println("Name resolver exiting.")
// quit
case msg =>
println("Unhandled message: " + msg)
act()
}
}
def getIp(name: String): Option[InetAddress] = {
try {
Some(InetAddress.getByName(name))
} catch {
case _: UnknownHostException => None
}
}
}
首先反应内{}是什么递归调用行为()呢?它看起来像所有的情况下会失败,它会简单地一直到最后什么都不做。
书中其次,他们使用以下REPL例如
NameResolver ! ("www.scala-lang.org", self)
哪里“自我”从何而来?我试图在主方法复制此
def main(args: Array[String]) {
NameResolver.start()
NameResolver ! ("www.scala-lang.org", Actor.self)
}
以上不工作
请您详细说明“上述不起作用”? –