【发布时间】:2011-12-02 15:07:21
【问题描述】:
我有一个类的不可变 Set,Set[MyClass],我想使用 Set 方法 intersect 和 diff,但我希望他们使用我的自定义 equals 方法而不是默认对象相等性测试来测试相等性
我已经尝试覆盖 == 运算符,但它没有被使用。
提前致谢。
编辑:
intersect方法是GenSetLike的具体值成员
规格:http://www.scala-lang.org/api/current/scala/collection/GenSetLike.html 源:https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_9_1_final/src//library/scala/collection/GenSetLike.scala#L1
def intersect(that: GenSet[A]): Repr = this filter that
所以交集是使用过滤方法完成的。
又一个编辑:
过滤器在 TraversableLike 中定义
规格:http://www.scala-lang.org/api/current/scala/collection/TraversableLike.html
def filter(p: A => Boolean): Repr = {
val b = newBuilder
for (x <- this)
if (p(x)) b += x
b.result
}
我不清楚的是它在没有谓词的情况下调用时使用什么,p。这不是隐式参数。
【问题讨论】:
-
您是否尝试过覆盖 .equals?
标签: scala set overriding