При сбое приложения a.meth(args)
компилятор ищет неявное представление из a
во что-то, имеющее метод meth
. Подойдет любое неявное значение или метод, соответствующий A => { def meth(...) }
. Если он найден, код переписывается как view(a).meth(args)
.
Где это выглядит? Сначала он просматривает текущую область видимости, состоящую из локально определенных и импортированных последствий.
(На самом деле существует второй этап поиска, на котором рассматриваются методы преобразования с аргументами по имени, но это не очень важно для этого ответа.)
Если это не удается, он выглядит в неявной области видимости. Он состоит из сопутствующих объектов «частей» того типа, который мы ищем. В данном случае мы следуем за A => { def meth(...) }
, поэтому мы просто смотрим на объект-компаньон A
(и его супертипы).
В транке Scala неявная область действия расширена до крошечного бита , чтобы включить сопутствующие объекты типов аргументов . Не уверен, что это было уже в 2.9.1, возможно, дружелюбный читатель выяснит это и обновит этот ответ.
Так 1 + BigInt(2)
расширен до BigInt.int2bigInt(1) + BigInt(2)