Какая функция Scala позволяет использовать оператор "плюс" на Any?

Я все еще изучаю Scala, и когда я столкнулся с примером в Koans, я не смог понять, почему он работает:

var foo : Any = "foo"
println(foo + "bar")

У любого нет метода +

Ответы

Ответ 1

Существует неявное преобразование в scala.Predef:

implicit def any2stringadd(x: Any): StringAdd

StringAdd определяет оператор/метод +:

def +(other: String) = String.valueOf(self) + other

Кроме того, поскольку scala.Predef всегда находится в области видимости, это неявное преобразование всегда будет работать.

Ответ 2

Он работает из-за неявных преобразований, которые "исправляют" ошибки определенного типа, для которых были созданы преобразования. Вот дополнительная информация о механизме неявных преобразований:

http://www.artima.com/pins1ed/implicit-conversions-and-parameters.html#21.2

Фактически он использует этот самый пример x + y, чтобы объяснить, как он работает. Это из 1-го издания книги, но объяснение остается в силе.