我正在使用++:
运算符来获取两个集合的集合,但是使用这两种方法获得的结果不一致:
scala> var r = Array(1, 2)
r: Array[Int] = Array(1, 2)
scala> r ++:= Array(3)
scala> r
res28: Array[Int] = Array(3, 1, 2)
scala> Array(1, 2) ++: Array(3)
res29: Array[Int] = Array(1, 2, 3)
为什么++:
和++:=
运算符给出不同的结果?
++
运算符不会出现这种差异。
我正在使用的Scala版本是2.11.8。
答案 0 :(得分:6)
++:
由于以冒号结尾,因此是右关联的。这意味着Array(1, 2) ++: Array(3)
等效于Array(3).++:(Array(1, 2))
。 ++:
可以被认为是“将左侧数组的元素添加到右侧数组。”
由于它是右关联的,因此r ++:= Array(3)
对r = Array(3) ++: r
的替代性降低。当您认为++:
的目的是前提时,这是有道理的。对于任何以冒号结尾的运算符,这种减法都是适用的。
如果要追加,可以使用++
(和++=
)。
答案 1 :(得分:1)
此处冒号(:)表示该函数具有正确的关联性
因此,例如coll1 ++: coll2
与(coll2).++:(coll1)
通常表示左集合的元素在右集合的前面
案例1:
Array(1,2) ++: Array(3)
Array(3).++:Array(1,2)
Elements of the left array is prepended to the right array
so the result would be Array(3,1,2)
情况2:
r = Array(1,2)
r ++:= Array(3) //This could also be written as the line of code below
r = Array(3) ++: r
= r. ++: Array(3)
= Array(1,2). ++: Array(3) //Elements of the left array is prepended to the right array
so their result would be Array(1,2,3)
希望这可以解决查询 谢谢:)