在Scala中获取比较函数

时间:2014-07-30 13:40:59

标签: scala

我正在玩排序算法。我很好奇是否有原始类型的内置比较函数。我知道输入(x: Int, y: Int) => x - y非常简单。我只是想知道是否有内置的比较,所以我不是重新发明轮子。对于字符串(区分大小写和文化敏感),事情显然变得更加复杂。如果没有内置的东西,我会感到惊讶。

1 个答案:

答案 0 :(得分:5)

如果某个类型A有一个Ordering个实例,您可以通过编写Ordering[A]来获取该实例,而Ordering可以使用compare方法获取该实例 - 扩展到您正在寻找的功能:

scala> Ordering[Int].compare _
res0: (Int, Int) => Int = <function2>

作为基元(以及其他一些类型)的特例,您可以直接引用该实例:

scala> Ordering.Int.compare _
res1: (Int, Int) => Int = <function2>

更一般地说,如果您有类型类FA有一个实例,您可以通过编写implicitly[F[A]]来获取该实例,因此以下内容也适用:

scala> implicitly[Ordering[Int]].compare _
res2: (Int, Int) => Int = <function2>

我会使用其中的第一个选择。