Какая функция Scala позволяет использовать оператор «плюс» на Any? - PullRequest
14 голосов
/ 19 сентября 2011

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

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

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

Ответы [ 2 ]

22 голосов
/ 19 сентября 2011

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

implicit def any2stringadd(x: Any): StringAdd

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

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

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

1 голос
/ 19 сентября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...