10

给定以下scala代码:

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

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

谢谢!

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

4

1 回答 1

14

Scala 序列具有三个运算符,它们通过向旧序列添加一些内容来生成新序列+++::+. ++运算符只是将 Scala 序列与另一个(或可遍历的)序列连接起来。另外两个分别前置和附加元素。

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

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 :+ ""

which creates a new vector by appending the empty string to the old vector, and then assigns it to v1.

于 2013-02-22T22:04:57.047 回答