编程语言中的协变和逆变有什么区别? [关闭]

2024-04-19

谁能解释一下协变和逆变的概念 编程语言理论?


协方差非常简单,最好从某个集合类的角度来思考List。我们可以参数化 the List具有某些类型参数的类T。也就是说,我们的列表包含类型的元素T对于一些T。列表将是协变的,如果

S 是 T 的子类型当且仅当 List[S] 是 List[T] 的子类型

(我使用数学定义iff意思是当且仅当.)

这是一个List[Apple] is a List[Fruit]。如果有一些例程接受List[Fruit]作为参数,我有一个List[Apple],然后我可以将其作为有效参数传递。

def something(l: List[Fruit]) {
    l.add(new Pear())
}

如果我们的集合类List是可变的,那么协方差就没有意义,因为我们可能假设我们的例程可以添加一些其他水果(不是苹果),如上所述。因此我们应该只喜欢不可变的集合类是协变的!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编程语言中的协变和逆变有什么区别? [关闭] 的相关文章

随机推荐