是否可以在具有方法>
(也是所有AnyVals)的所有类型上一般地定义它,以便使用单个实现方法就足够了?
答案 0 :(得分:4)
你可以声明一个隐式转换:
implicit def greater2order[A](self : { def >(that : A) }) : Order[A] = ...
然后只使用scalaz ......
答案 1 :(得分:3)
标准库已经完成了。但是没有为具有>
方法的对象分配类型......
List(1,2,3).max(Ordering.fromLessThan( (a:Int, b:Int) => b > a) )
基本上,此语法适用于具有>
方法或某些隐式转换使>
可用的任何内容。它创建了一个可以传递给标准max
方法的订单。
又一个例子:
case class S(s:String) {
def >(that:S) = java.text.Collator.getInstance.compare(s, that.s) > 0
}
List(S("abc"), S("ABa"), S("abd")).max(Ordering.fromLessThan( (a:S,b:S) => b>a) )
// res9: S = S(abd)
答案 2 :(得分:1)