Почему scala.math.PartialOrdering.lteq является абстрактным, а не определенным в терминах.tryCompare?
Кажется, что scala.math.PartialOrdering.lteq
всегда должен быть определен как (или, по крайней мере, дать тот же результат, что и):
override def lteq(x: Pattern, y: Pattern) = {
tryCompare(x, y).map(_ <= 0).getOrElse(false)
}
Есть ли какая-то причина, по которой эта реализация не приведена в scala.math.PartialOrdering
черта характера?
1 ответ
Решение
Я предполагаю, чтобы поощрить написание более эффективного 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
}
... и вам не нужно было бы писать уродливый override
модификатор при реализации lteq
,
Насколько я вижу tryCompare
никогда не используется во всем теле стандартной библиотеки Scala, так что, возможно, это просто "остаток"...