比较 Seq 和 Array 的不同行为

Compare Seq and Array different behavior

提问人:Hao Tan 提问时间:7/19/2019 最后编辑:Mario GalicHao Tan 更新时间:7/19/2019 访问量:222

问:

Scala 似乎将具有相同值的 s 视为单个对象,但与 s 不同。SeqArray

Seq其行为与 相同。ListSet

scala> Array(1) == Array(1)
res2: Boolean = false

scala> Seq(1) == Seq(1)
res3: Boolean = true

为什么会这样?背后的原因是什么?

scala 相等 scala-collections

评论


答:

5赞 Gagandeep Kalra 7/19/2019 #1

这是因为 Array 本质上是 Java 数组的别名,它实现 equals 作为引用相等 - 仅当两个变量指向同一个数组实例时才返回 true。

Array 是唯一一个检查引用相等性的 Scala 集合,对于所有其他集合,它委托给检查值相等性的 .equals。==

不过,Scala 2.13 引入了不可变的数组,它们的行为符合预期。

现在,您可以使用 or 来代替比较。.sameElements.deep