устарела в мае 2008 года в редакция 15071 с сообщением:
Удалите все проблемные + методы и удалите те, которые никогда не появлялись в выпуске.
Я ожидаю, что это должно было избежать двусмысленности с StringAdd # +. Сравните разницу между 2.7.6 и 2.8.0 бета ниже:
Welcome to Scala version 2.7.6.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_15).
Type in expressions to have them evaluated.
Type :help for more information.
scala> List(1) + 2
warning: there were deprecation warnings; re-run with -deprecation for details
res0: List[Int] = List(1, 2)
scala> List(1) + "2"
warning: there were deprecation warnings; re-run with -deprecation for details
res1: List[Any] = List(1, 2)
В 2.8 метод был удален, и вы получите:
Welcome to Scala version 2.8.0.Beta1-RC8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_15).
Type in expressions to have them evaluated.
Type :help for more information.
scala> List(1) + 2
<console>:5: error: type mismatch;
found : Int(2)
required: String
List(1) + 2
^
scala> List(1) + "2"
res1: java.lang.String = List(1)2
UPDATE
В списке пользователей scala Мартин Одерский отмечает:
Чтобы узнать, что на самом деле плохо
Список # +, подумайте, что вы ожидаете
следующее для производства:
Список (1, 2, 3) + "правильный
результат "
oxbow_lakes добавляет - мне потребовалось некоторое время, чтобы распаковать этот загадочный комментарий, но я думаю, дело в том, что он нарушит коммутативность типов, подразумеваемую оператором +
. То есть тип a + b
должен совпадать с типом b + a
UPDATE
Уточнение Мартина Одерского:
Что бы вы ожидали
Список (1, 2, 3) + «правильный результат»
производить? Я ожидал бы строку:
«Список (1, 2, 3) - правильный результат».
С 2.7 стилем List. + Вы получите вместо
Список [Любой], Список (1, 2, 3, «это
правильный результат ").
Я классифицирую это как неприятный сюрприз. В
Резюме, никогда не должно быть
+ метод для коллекций, ковариантных по типу элемента. наборы
и карты не вариантные, поэтому
у них может быть + метод. Это все
довольно деликатный и грязный. Мы бы
лучше, если мы не будем пытаться
дубликат Java + для строки
конкатенации. Но когда Скала получила
разработал идею было сохранить
по существу, все выражения Java
синтаксис, включая String +. И его
слишком поздно, чтобы изменить это сейчас.