Rust 函数指针逆变

问题描述

我无法理解 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 (将#修改为@)