2009-06-29 19 views
6

cuando llamo:¿Cómo Scala "completa" los argumentos faltantes en una clase de caso?

actor_ ! Exit 

¿Cómo se va a convertir en una construcción de:

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

En particular, ¿cómo es que cuando llamo a esto de un agente remoto (cliente) que tiene Ha sido link ed a un actor de remoto (servidor), que el servidor recibe una instancia de Exit donde la propiedad from es un actor:

'[email protected](10.10.7.90,8366) 

Básicamente me gustaría descubrir cómo puedo manejar este objeto de cliente remoto.

Respuesta

2

Lo que está enviando es el objeto singleton Exit. En la API de Scala, simplemente desplácese hacia abajo pasando las clases y busque los objetos.

object Exit 
extends (AbstractActor, AnyRef) => Exit 

Ahora, no he visto el código, por lo que no sé cómo lo está utilizando. Observe, sin embargo, que este objeto Exit es (en realidad, se extiende) una función, que toma dos parámetros y devuelve una clase de caso Exit formada por ellos. También incluirá algunas cosas en la declaración de clase de caso.

O, en otras palabras, Exit.apply (x, y) (la función Exit se aplica) tiene el mismo resultado que Exit (x, y) (el constructor para la clase Exit). Pero aunque no puedes aprobar una clase, puedes pasar un objeto.

+0

Ah; IDEA me señala en la clase equivocada. La pregunta sigue en pie; ¿De dónde vienen AbstractActor y msg? ¿Y cómo está terminando como una instancia de la clase de caso Exit? –

+0

Mi código es básicamente "actor_! Salir". No estoy pasando ninguna variable a nada. Y sin embargo, el actor termina recibiendo la clase de caso Exit (from, msg) con algunos valores hermosos y precisos. ¿Y cómo el objeto Exit amplía la función binaria cuando no declara un método de apply()? –

+0

¡Ah, pero Exit declara un método de apply()! Su tipo es "(AbstractActor, AnyRef) => Exit", que es lo mismo que "Function2 [AbstractActor, AnyRef, Exit]". Como Function2 declara una aplicación, entonces también debe salir. –

Cuestiones relacionadas