相关疑难解决方法(0)

为什么Array的==函数不为Array(1,2)== Array(1,2)返回true?

Scala编程中,作者写道Scala的==函数比较值相等而不是引用相等.

这在列表上按预期工作:

scala> List(1,2) == List(1,2)
res0: Boolean = true
Run Code Online (Sandbox Code Playgroud)

但它不适用于数组:

scala> Array(1,2) == Array(1,2)
res1: Boolean = false
Run Code Online (Sandbox Code Playgroud)

作者建议使用sameElements函数:

scala> Array(1,2).sameElements(Array(1,2))
res2: Boolean = true
Run Code Online (Sandbox Code Playgroud)

作为解释,他们写道:

虽然这看似不一致,但鼓励对两个可变数据结构的相等性进行明确测试是语言设计者的保守方法.从长远来看,它可以帮助您避免条件下的意外结果.

  1. 这是什么意思?他们在谈论什么样的意外结果?如果数组在相同位置包含相同的元素,那么我还能从数组比较中得到什么呢?为什么equals函数可以工作List但不能工作Array

  2. 如何使equals函数在数组上起作用?

scala

22
推荐指数
2
解决办法
5392
查看次数

使用`==`运算符的Array类型的奇怪行为

scala> List(1,2,3) == List(1,2,3)

res2: Boolean = true

scala> Map(1 -> "Olle") == Map(1 -> "Olle")

res3: Boolean = true
Run Code Online (Sandbox Code Playgroud)

但是当尝试对Array执行相同操作时,它的工作方式不同.为什么?

scala> Array('a','b') == Array('a','b')

res4: Boolean = false
Run Code Online (Sandbox Code Playgroud)

我使用过2.8.0.RC7和2.8.0.Beta1-prerelease.

arrays scala equality equals

10
推荐指数
1
解决办法
1319
查看次数

标签 统计

scala ×2

arrays ×1

equality ×1

equals ×1