ho avuto uno strano bug ieri che alla fine ho ridotto al seguente codice:comportamento imprevisto con impliciti
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
Mi aspetto che questo un'eccezione, dal momento che String non ha un metodo /
. Invece, Scala ha trattato la variabile implicita come un metodo implicito (perché implementa Function[String,Int]
) e ha convertito la stringa "56" nel numero intero 56.
Come funziona? Basandomi sulle regole della ricerca implicita, non pensavo che le variabili implicite che fungono da funzioni verrebbero prese in considerazione.
Bel preavviso, grazie. – Odomontois
In realtà, una conversione 'implicit def' funziona perché viene automaticamente trasformata in un valore di funzione (ovvero _eta expansion_). –