以下代码片段摘自《Scala编程》:
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
}
}
}
首先,在 react {} 中,对 act() 的递归调用有什么作用?看起来所有的情况都会失败,它只是简单地跳过到最后什么也不做。
其次,在这本书中,他们使用了以下 REPL 示例:
NameResolver ! ("www.scala-lang.org", self)
'self'是从哪里来的?我尝试在主方法中复制这个。
def main(args: Array[String]) {
NameResolver.start()
NameResolver ! ("www.scala-lang.org", Actor.self)
}
上述方法不起作用。