Посмотрите на Predef.intWrapper(Int): RichInt
Это наследуется Predef
от LowPriorityImplicits
. Унаследованные последствия имеют более низкий приоритет, чем не наследуемые.
Обратите внимание, что просматривая исходный код библиотеки, вы действительно не видите конверсию. Лучший способ увидеть его в небольшом фрагменте - это скомпилировать (или запустить в REPL) с параметром -Xprint:typer
. Это покажет преобразование, которое вставляет типограф, чтобы заставить код компилироваться, когда типы не совпадают:
$ scala -Xprint:typer
scala> 3.abs
[[syntax trees at end of typer]]// Scala source: <console>
// stuff removed
private[this] val res0: Int = scala.this.Predef.intWrapper(3).abs;
// more stuff removed
}