2013-02-22 102 views

回答

11

斯卡拉序列有三个操作符,它们通过在旧序列中添加某些内容来生成新序列:+++::+++运算符只是将Scala序列与另一个(或可遍历)序列连接起来。另外两个prepend和append元素,分别。

+::+的特有语法是由于它们的使用方式。任何以:结尾的运算符都适用于右侧的对象,而不是左侧。那就是:

1 +: Seq.empty == Seq.empty.+:(1) 

根据对称性,其他运营商:+,虽然冒号是在这种情况下毫无意义。这让你写这样的东西:

scala> 1 +: 2 +: 3 +: Seq.empty :+ 4 :+ 5 :+ 6 
res2: Seq[Int] = List(1, 2, 3, 4, 5, 6) 

请注意如何添加元素最终在他们在表达式中显示完全相同的位置。这可以更容易地查看发生了什么。

现在,你有:+=,没有任何上述。实际上,Scala允许将任何运算符与=连接起来组成一个get-and-set操作。因此,常见的增量表达:

x += 1 

实际上意味着

x = x + 1 

同样,

v1 :+= "" 

装置

v1 = v1 :+ "" 

其通过附加空字符串创建一个新的矢量老传染媒介,然后将其分配给v1

+1

优秀的答案。这个提交使他们提取器/ unapply(),以及序列作曲家:https://github.com/scala/scala/commit/b3efb3d493605d1c7e106e5f0a697b52ebb3d97c – 2013-02-23 05:06:16

+1

谢谢,明白了! Scala真的很疯狂,一旦我了解了一些东西,感觉就像从来不想回到java ......但让我们看看;-) – 2013-02-23 09:27:49

+0

为了完整性,没有什么像'+ =:'? – 2013-02-23 13:41:00

相关问题