这是一个最小的例子
package org.example
import akka.actor._
import akka.pattern.ask
import akka.util.duration._
import akka.util.Timeout
class Counter extends Actor {
def receive = {
case _ => sender ! "hi"
}
}
object AkkaProjectInScala extends App {
val system = ActorSystem("AkkaProjectInScala")
val counter = system.actorOf(Props[Counter])
// this will raise NullPointerException
(counter ? "i just came to say hello") onSuccess {
case x => println("He said " + x)
}
implicit val timeout = Timeout(5 seconds)
system.shutdown()
}
这看起来很奇怪,因为当我在控制台中尝试这样的事情时,隐式会引发编译错误
scala> def magic(a: Int)(implicit b: Int) = a + b
magic: (a: Int)(implicit b: Int)Int
scala> magic(3)
<console>:9: error: could not find implicit value for parameter b: Int
magic(3)
使用 Akka 时是否会发生其他一些魔术,从而阻止编译器在编译时检测到这一点?