Почему надстройка Scala устарела? - PullRequest
18 голосов
/ 18 июня 2011

Я заметил, что Addable устарело, а Subtractable - нет.Что не так с Addable, и почему Subtractable отличается?

Ответы [ 2 ]

20 голосов
/ 18 июня 2011

Продолжая ответ Даниэля, + также очень плохой оператор для вставки коллекций. Математически оператор + имеет очень условное значение, и часть этого значения является гарантией ассоциативности. К сожалению, ассоциативность - это гарантия, которая не имеет никакого смысла, когда вы добавляете Int к Vector[Int]. Таким образом, + всегда был очень запутанным оператором для любого, кто имел какую-либо алгебраическую подготовку.

+: и :+ превосходят по нескольким параметрам, не последним из которых является отсутствие ожидания ассоциативности. На самом деле, сама асимметрия операторов подразумевает не -ассоциативность, что является именно их семантикой. Кроме того, +: и :+ очень хорошо отражают друг друга, а +: является ассоциативно-правым, и все это обеспечивает очень естественный API для prepend и append коллекции соответственно.

18 голосов
/ 18 июня 2011

Проблема в том, что + перегружен для объединения String в не-строки. Таким образом, всякий раз, когда вы используете метод + для типа, у которого его нет, вы получите сообщение об ошибке, которое не связано с реальной проблемой: тип, который вы имеете, не тот, который вы ожидали.

Есть +: и :+, чтобы заменить его.

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