问题描述
我无法理解 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
的任何事物。
如果你在需要的地方传递 'short ' ,那么这不会不起作用,这意味着传递的 'short 不会活得足够长吗?
我知道当涉及到生命周期时,如果 'long: 'short
,那么 'long
是 'short 的子类型(因为 'long
是 'short
和更多),即使有考虑到这一点,我仍在努力解决上述问题..
有人能帮我弄明白吗?
此外,当谈到方差时,为什么我们说“结束”,例如:&mut T
是不变的结束 T'
?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)