2017-02-16 2 views
0

Wie eine Wrapper-Funktion/Klasse addActorToSystem() fürScala Akka System actorRef Wrapper

trait Stage extends Actor 
class Stage1(i:Int) extends Stage 
class Stage2(i:Int) extends Stage 

und

implicit val system = ActorSystem("mySystem") 

anstelle des Anrufs

system.actorOf(Props(new Stage1(123)), "myStage1") 

Die definieren folgende funktioniert nicht

Sie können keine Instanz [Stage2] erstellen explizit den Konstruktor (neu)

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

Hat Ihr 'Stage1' &' Stage2' die 'Schauspieler # receive' außer Kraft setzen Methode irgendwo? –

Antwort

1

Vielleicht wie etwas das würde Ihnen helfen:

def addActorToSystem[T <: Stage](act: Class[T], i: Int)(name: String)(implicit sys: ActorSystem) = { 
    sys.actorOf(Props(act, i), name) 
} 

Und Nutzung wie folgt :

val s1 = addActorToSystem(classOf[Stage1], 1)("s1") 
val s2 = addActorToSystem(classOf[Stage2], 2)("s2") 

Das Erstellen eines Aktors ohne ActorContext (mithilfe von Konstruktor) ist nicht zulässig.

Der einzige Grund, warum dies in Props funktioniert, ist die Tatsache, dass Konstruktor Aufruf als Neben name-Parameter so gehandhabt wird seine Bewertung DEFFERED wird

Verwandte Themen