小编L.Y*_*Sim的帖子

需要澄清关于`Box`,`Vec`和其他集合的(共)方差的Rust Nomicon部分

Rust Nomicon有一个关于方差的整个部分,除了这个关于Box<T>Vec<T>(共)变体的小部分之外我或多或少都能理解T.

Box并且Vec是有趣的案例,因为它们是变体,但你绝对可以存储价值!这是Rust变得非常聪明的地方:它们很适合变体,因为你只能通过可变参考存储它们中的值!可变引用使整个类型不变,因此可以防止您将短期类型走私到它们中.

令我困惑的是以下几行:

它们很适合变种,因为你只能通过可变参考存储它们中的值!

我的第一个问题是我对可变引用的含义感到有些困惑.它是Box/ Vec?的可变引用?

如果是这样,那么我只能通过可变引用在其中存储值的事实如何证明它们的(共)方差?我明白了什么(共)方差和具有它的好处Box<T>,Vec<T>等等,但我努力只看到能够通过可变引用和(共)方差的理由来存储值之间的联系.

另外,当我们初始化a时Box,是否在没有涉及可变引用的情况下将值移入框中?这是否与我们只能通过可变引用存储值的声明相矛盾?

最后,在什么情况下借用这个"可变参考"?他们是否意味着当你调用修改它的方法BoxVec你隐含地采取&mut self?这是提到的可变参考吗?


2018年5月2日更新:

由于我还没有得到这个问题的满意答案,我认为这个nomicon的解释真的令人困惑.正如下面的评论帖子中所承诺的那样,我在Rust Nomicon存储库中打开了一个问题.您可以跟踪那里的任何更新.

generics polymorphism covariance rust

9
推荐指数
1
解决办法
307
查看次数

标签 统计

covariance ×1

generics ×1

polymorphism ×1

rust ×1