据我了解,Scala 的 ==
定义两个对象的自然相等性。
我预计Array(0,1,2) == Array(0,1,2)
比较自然平等。例如,在与另一个数组的相应元素进行比较时,检查数组的所有元素是否都返回 true。
人们告诉我 Scala 的 Array
只是一个 Java []
只比较身份。覆盖 Array
不是更有意义吗?的 equals
比较自然平等的方法?
最佳答案
Scala 2.7 尝试向 Java 添加功能 []
数组,并遇到了有问题的极端情况。 Scala 2.8 已经声明 Array[T]
是 T[]
,但它提供了包装器和等价物。
在 2.8 中尝试以下操作(编辑/注意:从 RC3 开始,GenericArray
是 ArraySeq
——感谢retronym 指出这一点):
import scala.collection.mutable.{GenericArray=>GArray, WrappedArray=>WArray}
scala> GArray(0,1,2) == GArray(0,1,2)
res0: Boolean = true
scala> (Array(0,1,2):WArray[Int]) == (Array(0,1,2):WArray[Int])
res1: Boolean = true
GenericArray
就像 Array
,除了添加了所有 Scala 集合的好东西。WrappedArray
包装 Java []
大批;上面,我已经将一个普通数组转换为它(比调用隐式转换函数更容易),然后比较包装的数组。这些包装器,虽然由 []
支持阵列,还给你所有的收藏好东西。
关于arrays - 为什么 `Array(0,1,2) == Array(0,1,2)` 没有返回预期的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30118015/