是否总是在scala ==中调用eq?

时间:2013-09-09 19:48:09

标签: scala

我使用规范映射(在scala中)实现了一个set wrapper。现在,当重新定义equals(和hashCode)时,我希望包含我的set wrapper的集合使用引用相等,即“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
  }

我猜这个库在调用equals之前自动执行“eq”(当使用==时),但我不确定。

1 个答案:

答案 0 :(得分:2)

==调用equals,正确处理null值。如果您想进行优化,则必须自己致电eq