常に次のように定義する必要があるようですscala.math.PartialOrdering.lteq
(または、少なくとも、と同じ結果が得られます)。
override def lteq(x: Pattern, y: Pattern) = {
tryCompare(x, y).map(_ <= 0).getOrElse(false)
}
scala.math.PartialOrdering
この実装がトレイトに指定されていない理由はありますか?
常に次のように定義する必要があるようです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
}
override
...そして、実装時に醜い修飾子を書く必要はありませんlteq
。
私が見る限り、tryCompare
Scala標準ライブラリ本体全体で使用されることは決してないので、おそらくそれは単なる「残り」です...