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