Вчера у меня была странная ошибка, которую я в итоге сократил до следующего кода:
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
Я ожидаю, что это вызовет исключение, поскольку String не имеет /
метод. Вместо этого Scala обработала неявную переменную как неявный метод (поскольку она реализует Function[String,Int]
) и преобразовала строку "56" в целое число 56.
Как это работает? Основываясь на правилах неявного поиска, я не думал, что неявные переменные, действующие как функции, будут рассматриваться.