给出下面的Scala代码:什么:+ =为scala.collection.immutable.Vector定义的方法?
var v1 = Vector("foo")
v1 :+= ""
是什么:+=
做什么,它是如何从+=
不同,并且它定义在哪里?
谢谢! PS:是的,我在此搜索,但没有发现任何东西。发现槽(http://simply.liftweb.net/index-2.3.html#prev)教程。
给出下面的Scala代码:什么:+ =为scala.collection.immutable.Vector定义的方法?
var v1 = Vector("foo")
v1 :+= ""
是什么:+=
做什么,它是如何从+=
不同,并且它定义在哪里?
谢谢! PS:是的,我在此搜索,但没有发现任何东西。发现槽(http://simply.liftweb.net/index-2.3.html#prev)教程。
斯卡拉序列有三个操作符,它们通过在旧序列中添加某些内容来生成新序列:++
,+:
和:+
。 ++
运算符只是将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
。
优秀的答案。这个提交使他们提取器/ unapply(),以及序列作曲家:https://github.com/scala/scala/commit/b3efb3d493605d1c7e106e5f0a697b52ebb3d97c – 2013-02-23 05:06:16
谢谢,明白了! Scala真的很疯狂,一旦我了解了一些东西,感觉就像从来不想回到java ......但让我们看看;-) – 2013-02-23 09:27:49
为了完整性,没有什么像'+ =:'? – 2013-02-23 13:41:00