Scala 作为系统 actorRef 包装器
Scala Akka system actorRef wrapper
如何为
定义包装器function/classaddActorToSystem()
trait Stage extends Actor
class Stage1(i:Int) extends Stage
class Stage2(i:Int) extends Stage
和
implicit val system = ActorSystem("mySystem")
而不是调用
system.actorOf(Props(new Stage1(123)), "myStage1")
以下无效
You cannot create an instance of [Stage2] explicitly using the constructor (new)
def addActorToSystem(act: Stage, i: Int)(name: String)(implicit sys: ActorSystem) = {
sys.actorOf(Props(act(i)), name)
}
也许这样的事情会对你有所帮助:
def addActorToSystem[T <: Stage](act: Class[T], i: Int)(name: String)(implicit sys: ActorSystem) = {
sys.actorOf(Props(act, i), name)
}
用法如下:
val s1 = addActorToSystem(classOf[Stage1], 1)("s1")
val s2 = addActorToSystem(classOf[Stage2], 2)("s2")
不允许在未定义 ActorContext 的情况下创建 actor(通过使用构造函数)。
这在 Props 中起作用的唯一原因是构造函数调用被作为 by-name 参数处理,因此它的评估被推迟了
如何为
定义包装器function/classaddActorToSystem()
trait Stage extends Actor
class Stage1(i:Int) extends Stage
class Stage2(i:Int) extends Stage
和
implicit val system = ActorSystem("mySystem")
而不是调用
system.actorOf(Props(new Stage1(123)), "myStage1")
以下无效
You cannot create an instance of [Stage2] explicitly using the constructor (new)
def addActorToSystem(act: Stage, i: Int)(name: String)(implicit sys: ActorSystem) = {
sys.actorOf(Props(act(i)), name)
}
也许这样的事情会对你有所帮助:
def addActorToSystem[T <: Stage](act: Class[T], i: Int)(name: String)(implicit sys: ActorSystem) = {
sys.actorOf(Props(act, i), name)
}
用法如下:
val s1 = addActorToSystem(classOf[Stage1], 1)("s1")
val s2 = addActorToSystem(classOf[Stage2], 2)("s2")
不允许在未定义 ActorContext 的情况下创建 actor(通过使用构造函数)。
这在 Props 中起作用的唯一原因是构造函数调用被作为 by-name 参数处理,因此它的评估被推迟了