我刚刚偶然发现了 Tony Morris 的一篇关于 Java 的博客文章以及该语言的一个基本问题:为集合定义定制的相等关系。我认为这是一件大事,并想知道是否有一些 scala 解决方案。
经典问题体现在对交易的思考中。假设我进行了两次 +100 沃达丰股票 @150p 的交易。这两个交易是平等的,是吗?除了他们不是同一个行业。在一个正常的现实世界系统的情况下,具有持久性或序列化,我不能依靠身份来告诉我两个引用是否指向同一个交易!
所以我想要的是能够创建一个集合,我可以将 Equality-relation 传递给:
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 中巧妙地做到这一点?
似乎使用隐式,添加到现有的 scalaSet
类型将是一件很容易的事情。