2012-10-08 3 views
27

¿Qué significa [A : Manifest : WireFormat] en el siguiente código? Es de com.nicta.scoobi.TextInput (disponible en github). No parece ser ninguno de los límites de tipo habituales.Significado de dos puntos adicionales en la parametrización de clase Scala

def fromDelimitedTextFile[A : Manifest : WireFormat] 
     (path: String, sep: String = "\t") 
     (extractFn: PartialFunction[List[String], A]) 
    : DList[A] = { 

    val lines = fromTextFile(path) 
    lines.flatMap { line => 
     val fields = line.split(sep).toList 
     if (extractFn.isDefinedAt(fields)) List(extractFn(fields)) else Nil 
    } 
    } 

¿Dónde puedo encontrar más información sobre este tema?

Respuesta

35

Esto se denomina contexto limitado. Ellos son el azúcar sintáctica para una lista de parámetros implícitos:

def meth[A : ContextBound1 : ContextBoundN](a: A) 

// ==> 

def meth[A](a: A)(implicit evidence: ContextBound1[A], ContextBoundN[A]) 

Si hay varios limita contexto de 1 a N, todos ellos son traducidos a la misma lista de parámetros. Consulte this question para obtener una explicación más detallada sobre cómo funcionan y para qué sirven.

Para encontrar estos símbolos, es útil leer el StackOverflow Scala Tutorial.

Cuestiones relacionadas