arrays - 为什么++ : operator in the Scala language so strange?

标签 arrays scala collections assignment-operator

我正在使用 ++:运算符获取两个集合的集合,但是我使用这两种方法得到的结果不一致:

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)

为什么要++:++:=运营商给出不同的结果?
这种区别在++中不会出现运算符(operator)。

我使用的 Scala 版本是 2.11.8。

最佳答案

由于它以冒号结尾,++:是右结合的。这意味着 Array(1, 2) ++: Array(3)相当于 Array(3).++:(Array(1, 2)) . ++:可以认为是“将左侧数组的元素添加到右侧数组中”。

由于它是右结合的,r ++:= Array(3)脱糖至 r = Array(3) ++: r .当您考虑到 ++: 的目的时,这是有道理的。正在准备中。这种脱糖适用于任何以冒号结尾的运算符。

如果要追加,可以使用 ++ (和 ++= )。

关于arrays - 为什么++ : operator in the Scala language so strange?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53332346/

相关文章:

java - Scala Function1<T,U> 在 Java 中变为 Function1<Object,Object>

c# - 在 Dictionary C# 中使用泛型类

javascript - 我如何在 javascript 对象中查找和计算重复值

scala - Spark Streaming中foreach和foreachRDD有什么区别

python - 访问由 JSON 数组组成的 Python 变量的数组值

scala - 链表中的协变类型 T

javascript - 函数: why are all children updating in this backbone collection?

java - 按字母顺序对复杂对象的数组列表进行排序

arrays - 将矩阵合并到R中的数组

javascript - 设置开始时的状态