2

本からのコード:

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 is exiting.")//quit
            case msg =>
                println("Unhandled message: "+msg)
                act()
        }
    }

    def getIp(name:String):Option[InetAddress]={
        try{
            Some(InetAddress.getByName(name))
        } catch {
            case _ : UnknownHostException => None
        }
    }

}

通訳ライン:

NameResolver ! ("http://stackoverflow.com", self)

しかし、エラーが発生しました:

scala> NameResolver ! ("http://stackoverflow.com", self)
<console>:8: error: too many arguments for method !: (msg: Any)Unit
              NameResolver ! ("http://stackoverflow.com", self)

その本によると、それはうまくいくはずです。例外の原因となる本からコピーしたコードにエラーはありますか?

4

1 に答える 1

3

タプルを渡そうとしていますが、コンパイラーは!2つの引数で呼び出していると見なします。かっこを省略できる場合もあるため、のようにタプルに追加のかっこが必要な場合があります((1, 2))。これは混乱を引き起こす可能性があります。試すNameResolver !(("http://stackoverflow.com", self))

于 2013-02-21T19:13:53.233 に答える