以下示例摘自Programming in Scala,2nd Edition。 我的疑問是爲什麼在下面的語句中提到了兩個翻轉「這個參數中的U型再次處於正位置(兩翻轉)」?Scala類型方差示例
喵方法結果參數的位置是+。因此,Cat [Cat [U,T],U]中的Cat [U,T]將具有 - 位置,因爲在Cat類的類型參數T中聲明爲-ve。
規則說,在C [參數],精氨酸的分類將翻轉如果C的類型參數聲明 - 像C [-Q]
應用該規則ü這應該是 - 將被翻轉+。所以只有翻轉。這本書中的段落中提到的U怎麼翻轉?
abstract class Cat[-T, +U] {
def meow[W−](volume: T−, listener: Cat[U+, T−]−)
: Cat[Cat[U+, T−]−, U+]+
}
類型參數,W,並且兩個值參數,體積和聽者的位置,都是負的。查看喵的結果類型,第一個Cat [U,T]參數的位置是負數,因爲Cat的第一個類型參數T用 - 標註。該參數內部的類型U再次處於正位置(兩次翻轉),而該參數內部的類型T仍處於負位置。