gpt4 book ai didi

rust - 改变存储在 Vec 枚举中的值

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

以下代码编译失败并出现以下错误:

enum Test {
C(i32),
}

fn main() {
let mut v = Vec::new();

v.push(Test::C(0));

if let Some(Test::C(ref mut c)) = v.last_mut() {
*c = *c + 1;
}
}
error[E0308]: mismatched types
--> src/main.rs:10:17
|
10 | if let Some(Test::C(ref mut c)) = v.last_mut() {
| ^^^^^^^^^^^^^^^^^^ expected &mut Test, found enum `Test`
|
= note: expected type `&mut Test`
found type `Test`

last_mut() 返回可变引用,我将 i32 作为可变引用。我已尝试如下所示使可变性更加清晰,但我遇到了相同的编译器错误。

if let Some(ref mut e) = v.last_mut() {
if let Test::C(ref mut c) = e {
*c = *c + 1;
}
}

为什么这行不通?

最佳答案

您只需要准确匹配错误消息中的内容即可。它需要一个 &mut Test,所以你应该匹配它:

if let Some(&mut Test::C(ref mut c)) = v.last_mut() {
// ^^^^^^
*c = *c + 1;
}

在这里it is running in the playground .

截至Rust 1.26 ,您的原始代码按原样工作,不再需要显式 refref mut 关键字:

if let Some(Test::C(c)) = v.last_mut() {
*c = *c + 1;
}

关于rust - 改变存储在 Vec 枚举中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47170186/

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