Какая функция 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-го издания книги, но объяснение остается в силе.