2017-01-03 4 views
0

Можно ли определить собственное понятие равенства или упорядочения для коллекций в Scala? Переопределение equals и hashCode не работает в этом случае, потому что я хотел бы иметь более одного экземпляра.Определить равенство/порядок неявно для коллекций

Вот примерно то, что я имел в виду: (игнорировать недействительность этого кода)

implicit val customEq1(x: Int, y: Int) = x % 8 == y % 8 
val customEq2(x: Int, y: Int) = x.toString == y.toString.take(2) 

val union = Set(1,15,3).union(Set(3,7,8)) // => Set(1,3,8) 

Я предположил бы, что равенство/упорядоченность быть класс типов, но функции, как, например, diff, union, intersect, похоже, не предлагают такой функциональности.

+1

Возможного дубликат [ Как я могу определить пользовательскую операцию равенства, которая будет использоваться неизменяемыми методами сопоставления множеств] (http://stackoverflow.com/questions/7681183/how-can-i-define-a-custom-equality-operation-that-will -be-used-by-immutable-set) – DeadNight

+0

Ответы на «повторяющийся» вопрос предполагают переопределение «равных», что не то, что я хотел, как объяснялось в моем вопросе. – TomTom

ответ

-1

Если у вас есть несколько различных реализаций для сравнения, вы можете создать класс для каждого с соответствующими переопределениями, то принуждать тип набора с неявным преобразованием, что-то вроде этого:

class MyCompInt { overrides... } 
val union = Set[MyCompInt](1, 15, 3).union(...) 
Смежные вопросы