【发布时间】:2015-11-23 12:31:47
【问题描述】:
正如我在其他帖子 (Unique id for Scala object) 中所问的那样,我似乎无法像 Python 一样拥有 id。
我仍然需要检查 Scala 中的单元测试是否相同。我运行了一项测试,并将某个嵌套集合对象(即 List[Map[Int, ...]])的返回值与我创建的对象进行比较。
但是,可变映射的 hashCode 与不可变映射的 hashCode 相同。结果 (x == y) 返回 True。
scala> val x = Map("a" -> 10, "b" -> 20)
x: scala.collection.immutable.Map[String,Int] = Map(a -> 10, b -> 20)
scala> x.hashCode
res0: Int = -1001662700
scala> val y = collection.mutable.Map("b" -> 20, "a" -> 10)
y: scala.collection.mutable.Map[String,Int] = Map(b -> 20, a -> 10)
scala> y.hashCode
res2: Int = -1001662700
在某些情况下,没关系,但在其他情况下,我可能需要让它失败测试。所以,我的问题来了。
Q1:比较两个值(包括非常复杂的数据类型)是否相同的常用方法是什么?我可能会比较
toString()的结果,但我认为这不是一个好主意。Q2:可变数据结构与不可变数据结构具有相同的 hashCode 是否是一般规则?
【问题讨论】:
标签: scala collections equality