以下示例摘自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仍处于负位置。