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

为什么scala.math.PartialOrdering.lteq是抽象的,而不是用.tryCompare定义的?,scala,partial-ordering,Scala,Partial Ordering,似乎必须始终将其定义为(或至少给出与相同的结果): 覆盖def lteq(x:模式,y:模式)={ tryCompare(x,y).map(我的猜测是鼓励编写更高效的lteq,因为所有其他方法都会回到lteq。因此,您不想创建选项,然后映射它。我宁愿问相反的问题——为什么tryCompare没有默认实现,例如: def tryCompare(x: T, y: T) = { val p1 = lteq(x, y) val p2 = lteq(y, x) if (p1) { if

似乎必须始终将其定义为(或至少给出与相同的结果):

覆盖def lteq(x:模式,y:模式)={

tryCompare(x,y).map(我的猜测是鼓励编写更高效的
lteq
,因为所有其他方法都会回到
lteq
。因此,您不想创建
选项,然后映射它。我宁愿问相反的问题——为什么
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
}
…而且在实现
lteq
时,您不需要编写丑陋的
override
修饰符

据我所知,
tryCompare
从未在整个Scala标准库中使用过,所以它可能只是一个数学家的“遗留”…

(那就是我!)从某种角度来看,让
tryCompare
未实现感觉更好,但要同意,如果你鼓励人们编写优化的代码,那么
lteq
是更好的替代选择。
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
}