2015-12-12 65 views
2

Scala的列表被聲明爲爲什麼階列表可能需要協變型如在方法paramenter + =

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 

的方法,預先考慮到一個列表中的元素被聲明爲

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

作爲A型是協變的,爲什麼編譯器不會抱怨,因爲A出現在+:中的逆變位置上。

+0

你能否重申你的問題,我不知道你在問什麼 –

+1

我想知道爲什麼類List的方法+:的簽名沒有違反協變的使用規則。 – Chen

回答

3

由於其完整的簽名是:

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

你在問題中提到的文檔只是簡單的一個,你需要檢查方法的完整簽名。

相關問題