Selon la documentation, PartiallyOrdered[A]
est covariant dans A
, tandis que Ordered[A]
est invariant (mais utilisé pour être covariant) dans A
.Variance de Ordered, PartiallyOrdered
Pourquoi Ordered[A]
était-il toujours covariant dans A
? N'est-ce pas une violation évidente du principe de substitution? Pourquoi Ordered[A]
ne peut-il pas être contravariant dans A
? Cela permettrait de saisir Ordered[Traversible[Char]]
comme Ordered[StringBuilder]
, par exemple. Je ne vois pas comment cela pourrait être problématique. J'ai des difficultés à comprendre la signature de tryCompareTo
en PartiallyOrdered
. Il semble que l'argument peut être une instance de n'importe quel type de A
. Ne pourriez-vous passer aucun objet en appelant le tryCompareTo[Any](anything)
? Si oui, comment la signature de la méthode est-elle meilleure que tryCompareTo(that: Any)
? Logiquement, les ensembles ordonnés sont une sous-classe d'ensembles partiellement ordonnés, mais les classes Scala ne semblent pas refléter cette relation. Est-ce parce que Ordered[A]
ne peut pas être covariant dans A
comme PartiallyOrdered[A]
peut?
Merci pour la réponse. Je suppose que je comprends tryCompareTo, après avoir regardé la signature pendant un petit moment. Des indications sur la variance de Ordered [A], cependant? –
Je ne vais pas encore éditer la réponse parce que je ne suis pas sûr de ce point mais je pense que c'est parce que vous ne pouvez pas être sûr que 'Ordered [A]' est égal à 'Ordered [B]' même si 'B <: A'. Plus de détails dans ce [extrait de Programming in Scala] (http://www.artima.com/pins1ed/object-equality.html) –