2

Scala List 声明为

sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with     Product with GenericTraversableTemplate[A, List] with LinearSeqOptimized[A, List[A]] with java.io.Serializable

将元素添加到 List 的方法声明为

def +:(elem: A): List[A]

由于类型 A 是协变的,为什么编译器没有抱怨,因为 A 出现在 +: 中的逆变位置?

4

1 回答 1

3

因为它的完整签名是:

def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That

您在问题中提到的文档只是简化的文档,您需要检查该方法的完整签名。

于 2015-12-12T10:36:12.357 回答