Подтвердить что ты не робот

Почему (копирование), добавляемое к Seq в Scala, определяется как: + и не просто + как в Set и Map?

Scala Карта и набор определяют оператор +, который возвращает копию структуры данных с одним добавленным к ней элементом. Эквивалентный оператор для Seq обозначается :+.

Есть ли причина для этой несогласованности?

4b9b3361

Ответ 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.