是否有人知道Scala的Map
实现,不使用相等(==
)但对象标识(eq
)用于密钥比较。也就是说,如果我有
case class Foo()
val a = Foo()
val b = Foo()
然后我想要
EqMap(a -> 1, a -> 2).toVector == Vector(a -> 2)
和
EqMap(a -> 1, b -> 2).toVector == Vector(a -> 1, b -> 2)
我知道我可以像这样包装我的钥匙:
class Eq[A <: AnyRef](val peer: A) {
override def hashCode = peer.hashCode
override def equals(that: Any) = that match {
case e: Eq[_] => peer eq e.peer
case _ => false
}
}
case class Foo()
val a = Foo()
val b = Foo()
a == a // true
a == b // true
new Eq(a) == new Eq(a) // true
new Eq(a) == new Eq(b) // false
但我不想支付包装所有东西的费用。