使用方程式比较其键的映射

时间:2014-04-30 22:06:00

标签: scala collections equality

是否有人知道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

但我不想支付包装所有东西的费用。

0 个答案:

没有答案