在我巩固了我对方法中参数为什么是具有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]
好的,那他们为什么要隐藏真正的签名?
答案 0 :(得分:2)
标记为[use case]
的Scaladoc条目首先在类型参数方面呈现最常见的情况,通常会为初学者带来更简单的构造。如果扩展它,您将获得完整的签名。
对于类型Foo[+A]
,您可以通过引入类型参数A
来实现采用B >: A
类似参数的方法,因为现在您无法提供作为子类型的值A
会违反类型健全性。在大多数情况下,您将预先添加List[A]
个A
类型的其他元素,因此可以简化文档。