Ahora veo que hay una pregunta relacionada preguntando qué estos operadores (<: <, <% <, =: =) hacen aquí:¿Cómo funciona exactamente la implementación de Scala de <: <, <% <, =: = en el compilador?
What do <:<, <%<, and =:= mean in Scala 2.8, and where are they documented?
pero todavía estoy confundido acerca de su aplicación. En particular, supongo que una vez que ha colocado un parámetro implícito que afirma una relación particular, puede usar variables como si se hubieran lanzado correctamente, p. Ej. esto compilará:
class Foo[T](a: T) {
def splitit(implicit ev: T <:< String) = a split " "
}
Pero, ¿cómo funciona esto realmente en el compilador? ¿Existe algún soporte de compilador mágico para estos operadores, y si no, ¿cuál es el mecanismo subyacente que le permite inferir este tipo de relación a partir de la definición? (¿Este mecanismo se agregó específicamente para permitir que estos operadores funcionen, y cuán específico es para estos operadores particulares?) Parece un poco mágico que pueda colocar un parámetro implícito adicional como este que de alguna manera cambia la interpretación del compilador de un tipo.
La fuente para ellos https://github.com/scala/scala/blob/v2.9.2/src/library/scala/Predef.scala#L394 – pedrofurla