2

ドキュメントによると、PartiallyOrdered[A]は で共変ですがAOrdered[A]は で不変です (ただし、以前は共変でした) A

Ordered[A]で共変だったのはなぜAですか? これは明らかな代替原則の違反ではありませんか?

Ordered[A]で反変になれないのはなぜAですか? これにより、たとえばOrdered[Traversible[Char]]an を an として入力できます。Ordered[StringBuilder]これがどのように問題になるかわかりません。

tryCompareToinの署名を理解するのに苦労していPartiallyOrderedます。引数は の任意のスーパータイプのインスタンスにできるようですA。を呼び出してオブジェクトを渡すことができませんでしたtryCompareTo[Any](anything)か? もしそうなら、メソッドの署名はどのように優れていtryCompareTo(that: Any)ますか?

論理的には、順序集合は部分順序集合のサブクラスですが、Scala クラスはこの関係を反映していないようです。これは、共変できないためですOrdered[A]か?APartiallyOrdered[A]

4

1 に答える 1

2

以前のバージョン (2.8.1)を見ると、共変であることに関連するものは何も見つかりませんでしたOrderedか?

編集:さらに調べて、ドキュメントで共変ではないという説明を見つけてください。Ordered

tryCompareinの場合PartiallyOrdered、署名は渡されたパラメーターにさらに制限を設定します。

def tryCompareTo [B >: A] (that: B)(implicit arg0: (B) ⇒ PartiallyOrdered[B]): Option[Int]

ここで、暗黙的はインスタンスとして見なされることをarg0意味し、したがって、このトレイトで定義されたすべてのメソッドにアクセスできることを意味します。thatPartiallyOrdered[B]

于 2011-06-09T22:18:47.427 に答える