2011-09-19 9 views

Respuesta

22

Hay una conversión implícita en el objeto scala.Predef:

implicit def any2stringadd(x: Any): StringAdd 

StringAdd define un + operador/método:

def +(other: String) = String.valueOf(self) + other 

Además, como scala.Predef siempre está dentro del alcance, esa conversión implícita siempre funcionará.

+4

'StringAdd' vive en' scala.runtime' ([código fuente en Github] (https://github.com/scala/scala/blob/master/src/library/scala/runtime/StringAdd.scala)) . No estoy seguro de por qué no aparece en [ScalaDoc] (http://www.scala-lang.org/api/current/index.html#scala.runtime.package). –

+0

Gracias por el enlace: lo he agregado a mi respuesta – Dylan

+0

@Kipton Interresting "not in scaladoc", ¿hay otros rasgos/objetos que no estén en scaladoc? (Uno supone encontrar cada rasgo/objeto de scala en scaladoc) Me parece que vale una nueva pregunta de SO ... –

1

Funciona debido a las conversiones implícitas que "corrige" ciertos errores de tipo para los que se han proporcionado conversiones. Aquí hay más información sobre el mecanismo de las conversiones implícitas:

http://www.artima.com/pins1ed/implicit-conversions-and-parameters.html#21.2

De hecho, se utiliza este mismo ejemplo x + y para explicar cómo funciona. Esto es de la primera edición del libro, pero la explicación sigue siendo válida.

Cuestiones relacionadas