正如我在其他帖子中所提到的那样(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一般规则?
答案 0 :(得分:1)
您正在寻找具有引用相等性的AnyRef.eq
(尽可能接近Python id
函数,如果您只想比较引用,则相同并且您不关心实际ID):
scala> x == y
true
scala> x eq y
false