prosseek
prosseek

Reputation: 191129

Checking sameness/equality in Scala

As I asked in other post (Unique id for Scala object), it doesn't seem like that I can have id just like Python.

I still need to check the sameness in Scala for unittest. I run a test and compare the returned value of some nested collection object (i.e., List[Map[Int, ...]]) with the one that I create.

However, the hashCode for mutable map is the same as that of immutable map. As a result (x == y) returns 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

In some cases, it's OK, but in other cases, I may need to make it failed test. So, here comes my question.

Upvotes: 0

Views: 343

Answers (1)

Sean Vieira
Sean Vieira

Reputation: 160053

You are looking for AnyRef.eq which does reference equality (which is as close as you can get to Python's id function and is identical if you just want to compare references and you don't care about the actual ID):

scala> x == y
true

scala> x eq y
false

Upvotes: 1

Related Questions