gpt4 book ai didi

scala - 为什么 "K <: T"中的T不能协变?

转载 作者:行者123 更新时间:2023-12-01 22:46:39 25 4
gpt4 key购买 nike

Scala 代码:

class Cat[T] {
def meow[K <: T] = ""
}

class Cat[-T] {
def meow[K <: T] = ""
}

它们可以被编译。

但是当T是协方差,下面的代码无法编译:

class Cat[+T] {
def meow[K <: T] = ""
}

编译器打印:

error: covariant type T occurs in contravariant position in type  <: T of type K
def meow[K <: T] = ""
^

<:右边的类型一定不能协变吗?为什么?

最佳答案

那是不合理的

Jazz <: Music , Classical <: Music , 但 Jazz 之间没有关系和 Classical ,

meow[K <: T]意味着 Cat[Music]可以喵喵叫Jazz , Classical , 或任何类型的选择。

另一方面,Cat[Classical]喵喵不可能是Jazz .

但是如果你有协变 Cat[+T] , 然后是 Cat[Classical] <: Cat[Music] , 所以 Cat[Classical] ,不拘一格Cat[Music]也应该能喵喵叫Jazz .

矛盾。

关于scala - 为什么 "K <: T"中的T不能协变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23358234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com