给出以下scala代码:
var v1 = Vector("foo")
v1 :+= ""
:+=
做了什么,与+=
有什么不同?它在哪里定义?
谢谢!
PS:是的,我确实搜索了这个,但没有找到任何东西。找到了这个(http://simply.liftweb.net/index-2.3.html#prev)教程。答案 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
。