2010-09-26 14 views
8

En proyecto Scala-brazo, ver código como este:":" en el parámetro de tipo

def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener) 

Puede alguien explicar el significado de [A: Recurso: Manifiesto]?

+4

http://stackoverflow.com/questions/2982276/what-is-a-context-bound-in-scala – retronym

Respuesta

18
def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener) 

significa

def managed[A](opener : => A)(implicit r: Resource[A], m: Manifest[A]) : ManagedResource[A] = new DefaultManagedResource(opener) 

Usted puede mirar link text7.4 Contexto límites y límites Ver para más información.

4

Utilizando un ejemplo simple para ilustrar:

def method[T : Manifest](param : T) : ResultType[T] = ... 

La notación T : Manifest significa que hay un contexto unido. En otra parte de su programa, en el alcance, debe definirse un singleton o valor de tipo Manifest[T] marcado como implícito.

Esto se consigue por el compilador de reescritura de la firma del método para utilizar un segundo bloque (implícita) de parámetros:

def method[T](param : T)(implicit x$1 : Manifest[T]) : ResultType[T] = ... 

medida que su ejemplo ilustra, múltiples límites de contexto pueden ser utilizados en la misma firma del método. También es posible combinarlos con límites de vista.

Cuestiones relacionadas