gpt4 book ai didi

enums - 为什么我不能从枚举中可变地借用一个原语?

转载 作者:行者123 更新时间:2023-11-29 07:45:08 24 4
gpt4 key购买 nike

我希望能够获得对 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 的其他内容,这些内容是 Boxed - 为什么可变借用(以及为什么只有它)失败了未装箱的原件?

最佳答案

您需要将 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 type usize, which doesn't live long enough.

关于enums - 为什么我不能从枚举中可变地借用一个原语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44089525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com