我和阿卡正在互相了解。
From : Akka 2.3.6(当前)Actor 推荐实践 http://doc.akka.io/docs/akka/current/scala/actors.html#actorselection-scala#Props
这是一个名为 DemoActor 的示例 actor:
class DemoActor(magicNumber: Int) extends Actor {
def receive = {
case x: Int => sender() ! (x + magicNumber)
}
}
In 推荐做法该文档的部分指出:“在每个 Actor 的伴随对象上提供工厂方法是一个好主意,这有助于保持合适的 Props 的创建尽可能接近 Actor 的定义。”他们喜欢这样做:
object DemoActor {
def props(magicNumber: Int): Props = Props(new DemoActor(magicNumber))
}
Question : 为 props 方法指定工厂有什么区别:
object DemoActor {
def props(magicNumber: Int): Props = Props(classOf[DemoActor], magicNumber)
}
如果您错过了,区别在于 Props 构造函数的参数:
new DemoActor(magicNumber)
VS
classOf[DemoActor], magicNumber
来自同一个 akka 文档页面,在道具部分 http://doc.akka.io/docs/akka/current/scala/actors.html#Props,它在使用时还提到Props(classOf[ActorWithArgs], "arg1"
):
“在构造 Props 对象期间会验证是否存在匹配的构造函数,如果没有找到或找到多个匹配的构造函数,则会导致 IllegalArgumentEception。”
这样也好不是吗?!?......