在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)
作为解释,他们写道:
虽然这看似不一致,但鼓励对两个可变数据结构的相等性进行明确测试是语言设计者的保守方法.从长远来看,它可以帮助您避免条件下的意外结果.
这是什么意思?他们在谈论什么样的意外结果?如果数组在相同位置包含相同的元素,那么我还能从数组比较中得到什么呢?为什么equals函数可以工作List但不能工作Array?
如何使equals函数在数组上起作用?
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.