如何使用方法“>”为每种类型定义最大函数?

时间:2011-05-12 23:18:39

标签: scala comparison language-design max

是否可以在具有方法>(也是所有AnyVals)的所有类型上一般地定义它,以便使用单个实现方法就足够了?

3 个答案:

答案 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)

Ordering trait可能相关。

它涵盖了标准的数字类型(然后是一些 - 参见“已知的子类”)。 Implicits可用于跨外部类型“打开”。

快乐的编码。