【发布时间】:2010-09-17 17:53:48
【问题描述】:
在Programming in Scala 中,作者写道,Scala 的== 函数比较值相等而不是引用相等。
这在列表上按预期工作:
scala> List(1,2) == List(1,2)
res0: Boolean = true
但它不适用于数组:
scala> Array(1,2) == Array(1,2)
res1: Boolean = false
作者建议改用sameElements 函数:
scala> Array(1,2).sameElements(Array(1,2))
res2: Boolean = true
他们写道:
虽然这可能看起来不一致,但鼓励对两个可变数据结构的相等性进行显式测试对于语言设计者来说是一种保守的方法。从长远来看,它应该可以帮助您避免条件语句中出现意外结果。
这是什么意思?他们在谈论什么样的意想不到的结果?如果数组在相同位置包含相同元素,除了返回 true 之外,我还能从数组比较中得到什么?为什么 equals 函数在
List上有效,而在Array上无效?如何使 equals 函数在数组上工作?
【问题讨论】:
-
我在这本书中也注意到了这个解释。这是不正确的,请参阅下面我自己的答案。除了这个错误,这本书很好。
-
可以简要说明发生了什么,“Java 将数组上的值相等定义为引用相等,而不是逐元素相等。”
标签: scala