Scala的Map和Set定义了一个+
运算符,它返回一个数据结构的副本,并附加一个元素。 Seq
的等效运算符表示为:+
。
这种不一致是否有任何原因?
答案 0 :(得分:49)
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中如果方法结束于:it get's applied in reverse order(不是a.method(b)而是b.method(a))
答案 1 :(得分:20)
仅供参考,接受的答案并非完全没有原因。这就是原因。
% 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这样的卷须有多长。