【发布时间】:2017-02-21 01:56:12
【问题描述】:
trait LowPriorityOrderingImplicits {
/** This would conflict with all the nice implicit Orderings
* available, but thanks to the magic of prioritized implicits
* via subclassing we can make `Ordered[A] => Ordering[A]` only
* turn up if nothing else works. Since `Ordered[A]` extends
* `Comparable[A]` anyway, we can throw in some Java interop too.
*/
implicit def ordered[A <% Comparable[A]]: Ordering[A] = new Ordering[A] {
def compare(x: A, y: A): Int = x compareTo y
}
implicit def comparatorToOrdering[A](implicit cmp: Comparator[A]): Ordering[A] = new Ordering[A] {
def compare(x: A, y: A) = cmp.compare(x, y)
}
}
那里,两个隐式函数(ordering[A] 和comparatorToOrdering[A])都返回Ordering[A],它应该冲突,但是为什么它在那里工作呢?
【问题讨论】:
-
查看他们的签名:第一个需要
Comparable[A],第二个需要Comparator[A]。这些是不同的隐式搜索。
标签: scala