根据文档,PartiallyOrdered[A]
中的A
是协变的,Ordered[A]
中A
是不变的(但过去是协变的)。
Ordered[A]
为什么A
有协变性?这不是明显违反替代原则吗?
Ordered[A]
为什么A
不能逆变?例如,这将允许Ordered[Traversible[Char]]
键入Ordered[StringBuilder]
。我不知道这可能会有什么问题。
我无法理解 PartiallyOrdered
中tryCompareTo
的签名。看起来这个参数可以是任何超类型A
的实例。你不能通过调用tryCompareTo[Any](anything)
来传递任何对象吗?如果是这样,方法签名如何优于tryCompareTo(that: Any)
?
逻辑上,有序集是部分有序集的子类,但Scala类似乎不反映这种关系。这是因为Ordered[A]
A
PartiallyOrdered[A]
中的{{1}}不能协调吗?
答案 0 :(得分:2)
查看previous version (2.8.1),我没有找到与Ordered
有关的任何相关信息?
编辑:进一步查看并在Ordered
的文档中找到一些explanation,使其不再协变。
对于tryCompare
中PartiallyOrdered
的情况,签名对传递的参数设置了更多限制:
def tryCompareTo [B >: A] (that: B)(implicit arg0: (B) ⇒ PartiallyOrdered[B]): Option[Int]
此处隐式arg0
暗示that
被视为PartiallyOrdered[B]
实例,因此它可以访问此特征中定义的所有方法。