Я читаю книгу Scala in Depth, глава 5 о имплицитах. Автор говорит об этом на странице 102:
Неявная область видимости, используемая для неявных представлений, такая же, как и для неявных параметров. Но когда компилятор ищет ассоциации типов, он использует тип, который пытается преобразовать из [выделено мной], а не тип, в который он пытается преобразовать.
Тем не менее, несколькими страницами позже он показывает пример с классом complexmath.ComplexNumber
. Вы импортируете i
, который является ComplexNumber
, и вызываете его *
метод, который принимает аргумент ComplexNumber
.
import complexmath.i
i * 1.0
Чтобы преобразовать 1.0 в ComplexNumber
, это находит неявное преобразование, которое было определено так:
package object complexmath {
implicit def realToComplex(r: Double) = new ComplexNumber(r, 0)
val i = ComplexNumber(0, 1)
Но это противоречит первому утверждению, не так ли? Нужно было найти Double => ComplexNumber
. Почему это было проверено в пакете complexmath
, который является частью неявной области видимости для ComplexNumber
, но не для Double
?