为集合隐式定义相等/排序

时间:2017-01-03 08:08:58

标签: scala collections equality implicit

是否有可能在Scala中定义我自己的相等概念或排序?覆盖equalshashCode在这种情况下不起作用,因为我希望有多个实例。

以下是我的想法:(忽略此代码的无效性)

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)

我认为等式/排序是一个类型类,但是像... diffunionintersect似乎没有提供任何此类功能。

1 个答案:

答案 0 :(得分:-1)

如果您有多个不同的实现进行比较,您可以使用适当的覆盖为每个实现创建一个类,然后使用隐式转换强制该类的类型,如下所示:

class MyCompInt { overrides... }
val union = Set[MyCompInt](1, 15, 3).union(...)