订单的差异,部分订购

时间:2011-06-09 21:42:48

标签: scala variance

根据文档,PartiallyOrdered[A]中的A是协变的,Ordered[A]A是不变的(但过去是协变的)。

Ordered[A]为什么A有协变性?这不是明显违反替代原则吗?

Ordered[A]为什么A不能逆变?例如,这将允许Ordered[Traversible[Char]]键入Ordered[StringBuilder]。我不知道这可能会有什么问题。

我无法理解PartiallyOrderedtryCompareTo的签名。看起来这个参数可以是任何超类型A的实例。你不能通过调用tryCompareTo[Any](anything)来传递任何对象吗?如果是这样,方法签名如何优于tryCompareTo(that: Any)

逻辑上,有序集是部分有序集的子类,但Scala类似乎不反映这种关系。这是因为Ordered[A] A PartiallyOrdered[A]中的{{1}}不能协调吗?

1 个答案:

答案 0 :(得分:2)

查看previous version (2.8.1),我没有找到与Ordered有关的任何相关信息?

编辑:进一步查看并在Ordered的文档中找到一些explanation,使其不再协变。

对于tryComparePartiallyOrdered的情况,签名对传递的参数设置了更多限制:

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

此处隐式arg0暗示that被视为PartiallyOrdered[B]实例,因此它可以访问此特征中定义的所有方法。