25

Scala 的 Map 和 Set 定义了一个+运算符,该运算符返回数据结构的副本,并附加一个元素。的等价运算符Seq表示为:+

这种不一致有什么原因吗?

4

2 回答 2

50

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

于 2012-08-25T19:16:41.370 回答
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 这样的卷须有多长。

于 2012-08-27T22:15:21.267 回答