List ::方法和协方差

时间:2014-09-30 22:56:38

标签: scala scala-2.10

在我巩固了我对方法中参数为什么是具有SO scala contravariant position on method的逆变位置的理解之后

我在scala中查看List [+ A],我看到这个方法很好,因为参数位置是逆变的

def contains[A1 >: A](elem: A1)

我没有得到的是:: method定义,似乎无法编译

def ::(x: A): List[A]

这种方法怎么了?哦,他们隐藏真正的签名?

def ::[B >: A](x: B): List[B]
好的,那他们为什么要隐藏真正的签名?

1 个答案:

答案 0 :(得分:2)

标记为[use case]的Scaladoc条目首先在类型参数方面呈现最常见的情况,通常会为初学者带来更简单的构造。如果扩展它,您将获得完整的签名。

对于类型Foo[+A],您可以通过引入类型参数A来实现采用B >: A类似参数的方法,因为现在您无法提供作为子类型的值A会违反类型健全性。在大多数情况下,您将预先添加List[A]A类型的其他元素,因此可以简化文档。