Scala 订单、部分或订单的差异

Scala 订单、部分或订单的差异,scala,variance,Scala,Variance,根据文档,PartiallyOrdered[A]在A中是协变的,而Ordered[A]在A中是不变的(但过去是协变的) 为什么有序[A]在A中总是协变的?这不是明显违反了替代原则吗 为什么有序[A]在A中不能是逆变的?例如,这将允许将有序[Traversible[Char]]键入为有序[StringBuilder]。我不认为这会有什么问题 我无法理解中tryCompareTo的签名。看起来该参数可以是A的任何超类型的实例。您不能通过调用tryCompareTo[any](任何内容)传入任何对象吗

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

为什么
有序[A]
A
中总是协变的?这不是明显违反了替代原则吗

为什么
有序[A]
A
中不能是逆变的?例如,这将允许将
有序[Traversible[Char]]
键入为
有序[StringBuilder]
。我不认为这会有什么问题

我无法理解中
tryCompareTo
的签名。看起来该参数可以是
A
的任何超类型的实例。您不能通过调用
tryCompareTo[any](任何内容)
传入任何对象吗?如果是这样,那么方法签名如何比
tryCompareTo(that:any)
更好

从逻辑上讲,有序集是偏序集的一个子类,但Scala类似乎并不反映这种关系。这是因为
Ordered[A]
A
中不能协变,因为
PartiallyOrdered[A]
可以协变吗?

查看,我没有发现任何与
Ordered
相关的协变信息

编辑:进一步查看,并在文档中找到一些已排序的不再是协变的

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

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

这里隐式的
arg0
意味着
被视为一个
PartiallyOrdered[B]
实例,因此它可以访问此特征中定义的所有方法。

感谢您的回答。我想我明白了,在盯着签名看了一会儿之后。关于有序[A]的方差有什么见解吗?我还不会编辑答案,因为我不确定这一点,但我认为这是因为你不能确定
Ordered[A]
等于
Ordered[B]
,即使
B