Methoden auf akka actors in scala aufrufen

9

Ich habe einen Schauspieler definiert als:

%Vor%

enthält eine Methode, mit der der Aktor vor dem Start eingerichtet wird:

%Vor%

Ich instanziere diesen Akteur so:

%Vor%

was mir einen ActorRef zurückgibt. Der Compiler lässt mich nicht "addRef" auf einem ActorRef aufrufen, da es ein Mitglied des Subtyps ist. Also wirke ich den Knoten mit:

%Vor%

Was den Compiler glücklich macht. Zur Laufzeit bekomme ich dann

%Vor%

das scheint für mich keinen Sinn zu ergeben, da es ein Untertyp ist und ich in der Lage sein sollte, darauf zu antworten.

Ideen?

    
Alex 08.11.2012, 14:50
quelle

3 Antworten

6

Sie sollten die Methoden eines Akteurs nicht direkt von einer anderen Klasse aufrufen. Es bricht das gesamte Design des Systems, das ist

  • um die spezifische Implementierung des Actors einzukapseln, indem nur mit dem ActorRef kommuniziert wird, das mit dem Aufruf von actorOf oder actorFor erhalten wurde
  • um die Kommunikation zwischen den Akteuren auf die Weitergabe von Nachrichten zu beschränken, indem die verfügbaren Methoden ( ! , ? ) verwendet werden

Wenn Sie eine Referenz in ActorA auf eine andere ActorB erstellen möchten, können Sie:

  • Erstellen Sie den Verweis auf ActorB im Initialisierungscode ActorA , wie in Ссылка
  • Senden Sie den ActorB -Verweis an die ActorA als spezifische Nachricht. Dann kann ActorA den Verweis innerhalb von receive implementation
  • speichern

Wenn Sie eine Methode aufrufen müssen, um eine Schnittstelle / Merkmalsbedingung zu erfüllen, sehen Sie sich Getippte Akteure

    
pagoda_5b 08.11.2012, 16:23
quelle
7

Wenn Sie dies zum Testen tun möchten, dann können Sie beim Erstellen eines Actors einfach folgendes tun:

%Vor%

Dann können Sie Methoden auf dem Actor ausführen

    
goldeneye13 14.11.2012 16:18
quelle
1

Sie können alles auf irgendwas umwandeln, und der Compiler wird das gerne tun, aber die Überprüfung zur Laufzeit wird fehlschlagen, wenn es nicht möglich ist. Die ActorRef ist keine Instanz Ihrer Actor -Klasse oder ein Subtyp davon.

Wenn Sie dies tun:

%Vor%

Sie erhalten eine ActorRef zurück, an die Sie nur Nachrichten senden sollten. Abgesehen davon wird der Aktor sofort gestartet, wenn Sie system.actorOf aufrufen. Daher ist es nicht möglich, eine Methode für die Instanz Actor vor dem Start aufzurufen.

Hier ist eine Beschreibung der Schauspieler aus den Akka Docs , die die Referenzen der Schauspieler erläutern .

    
Björn Antonsson 08.11.2012 16:27
quelle

Tags und Links