我很难理解 Rust 中的逆变性。
具体来说:
然而,同样的逻辑不适用于论据。考虑尝试满足:
fn handle_animal(Animal);
和
fn handle_animal(Cat);
第一个函数可以接受 Dogs,但第二个函数绝对不能。协方差在这里不起作用。但如果我们翻转它,它确实有效!如果我们需要一个可以处理 Cats 的函数,那么一个可以处理任何 Animal 的函数肯定可以正常工作。或者将它与真正的 Rust 联系起来:如果我们需要一个可以处理任何
'long
至少存在'short
.
(来自:https ://doc.rust-lang.org/nomicon/subtyping.html )
这是我无法理解的部分:
或者将它与真正的 Rust 联系起来:如果我们需要一个可以处理任何
'long
至少存在'short
.
如果你在需要'long'的地方传递'short',这不会不起作用吗,这意味着传递的'short'不会活得足够长?
我知道,当谈到生命周期时,如果'long: 'short
,那么'long
是“短”的子类型(原样'long
和'short
更多),即使考虑到这一点,我仍然在为上述问题苦苦挣扎。
有人可以帮我理解吗?
此外,当谈到方差时,为什么我们说“over”,如:&mut T
is invariant over T'
?