miałem dziwny błąd wczoraj, że w końcu sprowadza się do następującego kodu:Nieoczekiwane zachowanie z implicits
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
Spodziewam to wyjątek, ponieważ String nie ma metody /
. Zamiast tego Scala traktowała domyślną zmienną jako metodę niejawną (ponieważ implementuje ona Function[String,Int]
) i przekształciła ciąg "56" w liczbę całkowitą 56.
Jak to działa? Opierając się na regułach wyszukiwania niejawnego, nie sądziłem, że uwzględniane będą niejawne zmienne, które działają jako funkcje.
Dobra wiadomość, dzięki. – Odomontois
W rzeczywistości, konwersja 'niejawna def' działa, ponieważ jest automatycznie przekształcana na wartość funkcji (to _eta rozszerzenie_). –