Почему (копирование), добавляемое к Seq в Scala, определяется как: + и не просто + как в Set и Map?
Scala Карта и набор определяют оператор +
, который возвращает копию структуры данных с одним добавленным к ней элементом. Эквивалентный оператор для Seq
обозначается :+
.
Есть ли причина для этой несогласованности?
Ответы
Ответ 1
В Map и Set нет понятия добавления (+:
) или добавления (:+
), так как они не упорядочены. Чтобы указать, какой из них (добавление или добавление) вы используете, добавлен :
.
scala> Seq(1,2,3):+4
res0: Seq[Int] = List(1, 2, 3, 4)
scala> 1+:Seq(2,3,4)
res1: Seq[Int] = List(1, 2, 3, 4)
Не путайте порядок аргументов, в scala, если метод заканчивается на: он применяется в обратном порядке (не a.method(b), но b.method(a))
Ответ 2
FYI, принятый ответ вовсе не причина. Вот почему.
% scala27
Welcome to Scala version 2.7.7.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_06).
scala> Set(1, 2, 3) + " is the answer"
res0: java.lang.String = Set(1, 2, 3) is the answer
scala> List(1, 2, 3) + " is the answer"
warning: there were deprecation warnings; re-run with -deprecation for details
res1: List[Any] = List(1, 2, 3, is the answer)
Никогда не недооценивайте, как долго растягиваются что-то вроде any2stringadd.