Как я могу определить пользовательскую операцию равенства, которая будет использоваться неизменяемыми методами сравнения Set

У меня есть неизменный набор класса Set [MyClass], и я хочу использовать методы Set, которые пересекаются и отличаются друг от друга, но Я хочу, чтобы они проверяли равенство, используя мой собственный метод равенства, а не тест на равенство объектов по умолчанию

. Я попытался переопределить оператор ==, но он не используется.

Заранее спасибо.

Редактировать:

Метод пересечения является членом конкретного значения GenSetLike

spec: http://www.scala-lang.org/api/current/scala/collection/GenSetLike.html src: 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

, поэтому пересечение выполняется с помощью метода фильтрации.

Еще один фильтр Edit:

определен в спецификации TraversableLike

: http://www.scala-lang.org/api/current/scala/collection/TraversableLike.html

src : https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_9_1_final/src//library/scala/collection/TraversableLike.scala#L1

def filter(p: A => Boolean): Repr = {
  val b = newBuilder
      for (x <- this) 
        if (p(x)) b += x
      b.result
}

Мне непонятно, что это использует при вызове без предиката, p. Это не неявный параметр.

43
задан Kareem 6 October 2011 в 23:12
поделиться