[英]How to define a max function for every type with a method “>”?
是否可以在具有方法>
(也是所有AnyVals)的所有类型上一般地定义它,以便使用单个实现方法就足够了?
你可以声明一个隐式转换:
implicit def greater2order[A](self : { def >(that : A) }) : Order[A] = ...
然后只使用scalaz ...
标准库已经完成了。 但是没有为具有>
方法的对象分配类型...
List(1,2,3).max(Ordering.fromLessThan( (a:Int, b:Int) => b > a) )
基本上,此语法适用于具有>
方法或某些隐式转换使>
可用的任何内容。 它创建了一个可以传递给标准max
方法的Ordering。
还有一个例子:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.