做什么:+ =为scala.collection.immutable.Vector定义的方法?

时间:2013-02-22 21:47:06

标签: scala

给出以下scala代码:

var v1 = Vector("foo")
v1 :+= ""

:+=做了什么,与+=有什么不同?它在哪里定义?

谢谢!

PS:是的,我确实搜索了这个,但没有找到任何东西。找到了这个(http://simply.liftweb.net/index-2.3.html#prev)教程。

1 个答案:

答案 0 :(得分:13)

Scala序列有三个运算符,通过向旧序列添加内容来生成新序列:+++::+++运算符只是将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