que tenía un extraño insecto ayer que finalmente reduje al siguiente código:comportamiento inesperado con implícitos
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).
Type in expressions to have them evaluated.
Type :help for more information.
scala> class X extends Function[String, Int] { def apply(x: String) = Integer.parseInt(x) }
defined class X
scala> implicit val x = new X
x: X = <function1>
scala> "56"/2
res2: Int = 28
espero que esto producirá una excepción, ya cadena no tiene un método /
. En cambio, Scala trató la variable implícita como un método implícito (porque implementa Function[String,Int]
) y convirtió la cadena "56" al entero 56.
¿Cómo funciona esto? Con base en las reglas de la búsqueda implícita, no pensé que se considerarían las variables implícitas que actúan como funciones.
Aviso agradable, gracias. – Odomontois
En realidad, una conversión 'implicit def' funciona porque se transforma automáticamente en un valor de función (que es _eta expansion_). –