Я заметил, что Addable
устарел, а Subtractable
- нет. Что случилось с Addable
и почему Subtractable
отличается?
Почему Scala Добавляется устаревшим?
Ответ 1
Проблема заключается в том, что +
перегружается, чтобы объединить String
в нестрочные. Таким образом, всякий раз, когда вы используете метод +
для типа, который его не имеет, вы получите сообщение об ошибке, которое не связано с реальной проблемой: тип, который у вас есть, не тот, который вы ожидали.
Там +:
и :+
, чтобы заменить его.
Ответ 2
Развернувшись на ответе Даниэля, +
также очень плохой оператор, который будет использоваться для вставки коллекции. Математически оператор +
имеет очень условное значение, и часть этого значения является гарантией ассоциативности. К сожалению, ассоциативность - это гарантия, которая не имеет никакого смысла, когда вы добавляете Int
в Vector[Int]
. Таким образом, +
всегда был очень запутанным оператором для всех, кто имел какое-либо алгебраическое обучение.
+:
и :+
превосходят по нескольким направлениям, не последним из которых является отсутствие ожиданий ассоциативности. В самом деле, сама асимметрия операторов подразумевает неассоциативность, которая является именно их семантикой. Кроме того, +:
и :+
очень хорошо зеркально отражают друг друга, а +:
является право-ассоциативным, все из которых вступает в сговор с целью обеспечить очень естественный API для сбора и добавления соответственно.