Неожиданное поведение с имплицитами

Вчера у меня была странная ошибка, которую я в итоге сократил до следующего кода:

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.

Как это работает? Основываясь на правилах неявного поиска, я не думал, что неявные переменные, действующие как функции, будут рассматриваться.

6
задан Bill 7 March 2012 в 17:47
поделиться