为什么scala.math.PartialOrdering.lteq是抽象的,而不是根据.tryCompare定义的?

Sco*_*son 8 scala partial-ordering

似乎scala.math.PartialOrdering.lteq必须始终定义为(或至少给出相同的结果):

override def lteq(x: Pattern, y: Pattern) = {
    tryCompare(x, y).map(_ <= 0).getOrElse(false)
}
Run Code Online (Sandbox Code Playgroud)

是否有某种原因这种实施没有在scala.math.PartialOrdering特质中给出?

0__*_*0__ 2

我的猜测是鼓励编写更高效的方法lteq,因为所有其他方法都回退到lteq. 所以你不想创建一个Option,然后映射它。我宁愿问相反的问题——为什么tryCompare默认情况下不实现,例如:

def tryCompare(x: T, y: T) = {
  val p1 = lteq(x, y)
  val p2 = lteq(y, x)
  if (p1) {
    if(p2) Some(0) else Some(-1)
  } else if (p2) Some(1) else None
}
Run Code Online (Sandbox Code Playgroud)

override...并且在实现时您不需要编写丑陋的修饰符lteq

据我所知,tryCompare它从未在整个 Scala 标准库主体中使用过,所以也许它只是一个“遗留”......