8

常に次のように定義する必要があるようですscala.math.PartialOrdering.lteq(または、少なくとも、と同じ結果が得られます)。

override def lteq(x: Pattern, y: Pattern) = {
    tryCompare(x, y).map(_ <= 0).getOrElse(false)
}

scala.math.PartialOrderingこの実装がトレイトに指定されていない理由はありますか?

4

1 に答える 1

2

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

私が見る限り、tryCompareScala標準ライブラリ本体全体で使用されることは決してないので、おそらくそれは単なる「残り」です...

于 2012-06-24T20:33:39.047 に答える