隐式定义集合的相等性/排序

Define equality/ordering implicitly for collections

提问人:TomTom 提问时间:1/3/2017 更新时间:1/3/2017 访问量:66

问:

是否可以在 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

Scala 集合 相等 隐式

评论

1赞 DeadNight 1/3/2017
如何定义将由不可变集比较方法使用的自定义相等操作的可能重复
0赞 TomTom 1/3/2017
正如我的问题中所解释的那样,“重复”问题的答案建议覆盖这不是我想要的。equals

答:

-1赞 DeadNight 1/3/2017 #1

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

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