Я только что наткнулся на одно из сообщений в блоге Тони Морриса о Java и о фундаментальной проблеме с языком: об определении индивидуального отношения равенства для коллекции. Я думаю, что это большое дело , и мне было интересно, было ли какое-то решение от scala.
Классическая проблема проявляется в размышлениях, скажем, о торговле. Допустим, я совершил две сделки по +100 акциям vodafone при 150 пенсов. Две сделки равны, да? За исключением того, что они не одна и та же торговля . В случае нормальной реальной системы с постоянством или сериализацией я не могу полагаться на identity , чтобы сказать мне, являются ли две ссылки на одной и той же сделкой !
Итак, я хочу создать коллекцию, в которую я могу передать отношение равенства:
val as = CleverSet[Trade](IdEquality)
val bs = CleverSet[Trade](EconomicsEquality)
Как мне эффективно реализовать мой набор (если EqualityRelation
также не определяет механизм hash
)?
trait EqualityRelation[T] {
def equal(t1: T, t2: T) : Boolean
def hash(t: T) : Int
}
Итак, вопросы:
- Есть ли библиотека, которая предоставляет эту возможность?
- Есть ли какой-нибудь способ сделать это аккуратно в Scala?
Похоже, с учетом этого было бы довольно легко добавить существующий тип Set
в scala.