web-dev-qa-db-ja.com

ScalaでSeqに追加(コピー)するのは、SetやMapのように+だけでなく:+として定義されるのはなぜですか?

Scalaのマップとセットは、単一の要素が追加されたデータ構造のコピーを返す+演算子を定義します。 Seqと同等の演算子は:+と表されます。

この矛盾の理由はありますか?

25
thesamet

Map and 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))

50
om-nom-nom

ちなみに、受け入れられた答えは全く理由ではありません。という訳だ。

% 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のようなものの巻きひげの長さを過小評価しないでください。

20
psp