Почему 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, так что, возможно, это просто "остаток"...

Другие вопросы по тегам