2017-02-16 33 views
0

如何定义包装函数/ addActorToSystem()斯卡拉阿卡系统actorRef包装器

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") 

以下不起作用

无法创建[2阶段]明确使用构造(新)实例

def addActorToSystem(act: Stage, i: Int)(name: String)(implicit sys: ActorSystem) = { 
    sys.actorOf(Props(act(i)), name) 
} 
+0

贵'Stage1'&'Stage2'覆盖'演员#receive'处理的事实方法吗? –

回答

1

也许这样的事情会帮助你:

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(使用构造函数)。

的唯一原因之一这部作品在道具是构造函数调用是由名称参数因而其评估递延