似乎scala.math.PartialOrdering.lteq
必须始终定义为(或至少给出与以下相同的结果):
override def lteq(x: Pattern, y: Pattern) = {
tryCompare(x, y).map(_ <= 0).getOrElse(false)
}
是否有某种原因没有在scala.math.PartialOrdering
特征中给出此实现?
我的猜测是鼓励编写更高效的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
}
。而且在实现lteq
时,您无需编写丑陋的override
修饰符。
据我所知tryCompare
从未在整个 Scala 标准库主体中使用过,所以也许它只是一个"剩余"......