繁体   English   中英

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

[英]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)

订购特征可能是相关的。

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

快乐的编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM