2015-12-12 5 views
2

Scala liste est déclarée commePourquoi scala Liste pourrait prendre le type covariant comme paramenter dans la méthode + =

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 

La méthode préfixer un élément à une liste est déclarée comme

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

type A est covariant, pourquoi le compilateur ne se plaint pas puisque A apparaît dans la position contravariante dans +:?

+0

pouvez-vous réitérer votre question, je ne suis pas sûr de ce que vous demandez –

+1

Je me demandais pourquoi la signature de la méthode +: de la classe Liste ne rompt pas la règle d'utilisation de covariant. – Chen

Répondre

3

Parce que sa signature est pleine:

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

Le document que vous avez mentionné dans la question est simplement celle simplifiée, vous devez vérifier la signature complète de la méthode.