2

我已经使用规范映射(在 scala 中)实现了一个集合包装器。现在,当重新定义equals(和hashCode)时,我希望包含我的集合包装器的集合使用引用相等,即“eq”。但是,我用于规范地图的集合应该使用真正的“等于”。我想出了以下解决方案:

  override def equals(obj: Any) =
  obj match {
    case o: SetWrapper => (o eq this) || o.set == this.set
    case _ => false
  }

我的问题是,我真的需要这个吗?

(o eq this) || o.set == this.set

或者使用它就足够了吗?

  override def equals(obj: Any) =
  obj match {
    case o: SetWrapper => o.set == this.set
    case _ => false
  }

我猜测库在调用等号之前会自动执行“eq”(使用 == 时),但我不确定。

4

1 回答 1

2

==调用equals,正确处理null值。eq如果你想要优化,你必须打电话给自己。

于 2013-09-09T19:51:54.877 回答