2

根据文档,PartiallyOrdered[A]在 中是协变的A,而在Ordered[A]中是不变的(但曾经是协变的)A

为什么曾经Ordered[A]是协变的A?这不是明显违反了替代原则吗?

为什么不能Ordered[A]逆变A?例如,这将允许Ordered[Traversible[Char]]将 a 键入为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意味着that被视为一个PartiallyOrdered[B]实例,因此它可以访问此特征中定义的所有方法。

于 2011-06-09T22:18:47.427 回答