2009-06-29 7 views
6

Quando chiamo:In che modo Scala "inserisce" gli argomenti mancanti in una classe di casi?

actor_ ! Exit 

Come è questo viene convertito in una costruzione di:

case class Exit(from: AbstractActor, reason: AnyRef) 

In particolare, come è possibile che quando chiamo questo da un (client) attore a distanza che ha stati link ed a un attore (server) remoto, che il server riceve un'istanza Exit cui la proprietà from è un attore:

'[email protected](10.10.7.90,8366) 

Fondamentalmente mi piacerebbe capire come posso ottenere un handle su questo oggetto client-client remoto!

risposta

2

Quello che si sta inviando è l'oggetto singleton Exit. Nell'API Scala, basta scorrere verso il basso oltre le classi e cercare gli oggetti.

object Exit 
extends (AbstractActor, AnyRef) => Exit 

Ora, non ho visto il tuo codice, quindi non so come lo stai usando. Si noti, tuttavia, che questo oggetto Exit è (in realtà, estende) una funzione, che accetta due parametri e restituisce una classe case Exit formata da essi. Avrà anche alcune cose inserite nell'istruzione case class.

In altre parole, Exit.apply (x, y) (la funzione Esci applicata) ha lo stesso risultato di Exit (x, y) (il costruttore per l'uscita di classe). Ma mentre non puoi passare una classe, puoi passare un oggetto.

+0

Ah; IDEA mi sta indicando la classe sbagliata. La domanda è ancora valida; da dove provengono AbstractActor e msg? E come finisce come un'istanza della classe case Exit? –

+0

Il mio codice è fondamentalmente "actor_! Exit". Non sto passando nessuna variabile a niente. Eppure l'attore_ finisce per ricevere la casistica Exit (da, msg) con alcuni valori belli e precisi. E in che modo l'oggetto Exit estende la funzione binaria quando non dichiara un metodo apply()? –

+0

Ah, ma Exit dichiara un metodo apply()! Il suo tipo è "(AbstractActor, AnyRef) => Exit", che è la stessa cosa di "Function2 [AbstractActor, AnyRef, Exit]". Poiché Function2 dichiara un'applicazione, quindi deve uscire. –

Problemi correlati