Akka和我正在相互了解。
这里有一个名为DemoActor的示例演员:
class DemoActor(magicNumber: Int) extends Actor {
def receive = {
case x: Int => sender() ! (x + magicNumber)
}
}
在文档的推荐实践部分中,它表明:“为每个Actor的伴生对象提供工厂方法是一个好主意,这有助于将合适的Props的创建尽可能接近actor定义。” 他们这样做:
object DemoActor {
def props(magicNumber: Int): Props = Props(new DemoActor(magicNumber))
}
问题: 像这样指定props方法的工厂有什么区别:
object DemoActor {
def props(magicNumber: Int): Props = Props(classOf[DemoActor], magicNumber)
}
如果你错过了,不同之处在于Props构造函数的参数:
new DemoActor(magicNumber)
VS
classOf[DemoActor], magicNumber
在akka文档页面的同一部分中,稍微往上一点,在Props section中提到,当使用Props(classOf[ActorWithArgs], "arg1"
)时:
“在构建Props对象期间,将验证是否存在匹配的构造函数,如果未找到或找到多个匹配的构造函数,则会导致IllegalArgumentEception异常。”
这是好事,不是吗?!?
classOf [DemoActor]
(考虑到我以前在Java中的经验,类查找非常昂贵)。在我的情况下,编译时错误的提高是好的,我会把动态查找留给特殊场合,当我真正需要它的时候。再次感谢您的帮助。 - neurozenscala.Function0
。Akka如何序列化函数对象? - Yang Bo