作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望能够获得对 Foo
枚举中 Bar
中包装的 usize
的引用(不可变和可变):
use Foo::*;
#[derive(Debug, PartialEq, Clone)]
pub enum Foo {
Bar(usize)
}
impl Foo {
/* this works */
fn get_bar_ref(&self) -> &usize {
match *self {
Bar(ref n) => &n
}
}
/* this doesn't */
fn get_bar_ref_mut(&mut self) -> &mut usize {
match *self {
Bar(ref mut n) => &mut n
}
}
}
但我无法获得可变引用,因为:
n
does not live long enough
我能够提供类似函数的两种变体来访问 Foo
的其他内容,这些内容是 Box
ed - 为什么可变借用(以及为什么只有它)失败了未装箱的原件?
最佳答案
您需要将 Bar(ref mut n) => &mut n
替换为 Bar(ref mut n) => n
。
当你在 Bar(ref mut n)
中使用 ref mut n
时,它会创建一个可变的引用Bar
中的数据,所以n
的类型是&mut usize
。然后你尝试返回 &mut &mut u32
类型的 &mut n
。
This part is most likely incorrect.
Now deref coercion kicks in and converts
&mut n
into&mut *n
, creating a temporary value*n
of typeusize
, which doesn't live long enough.
关于enums - 为什么我不能从枚举中可变地借用一个原语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44089525/
我是一名优秀的程序员,十分优秀!