这是我能想到的最简单的例子,它说明了我所面临的问题。我是Rust的新手,所以对不起,我很抱歉。
#[derive(Debug)]
enum TestType {
First,
Second(i32),
}
fn main() {
let mut test_var = TestType::First;
println!("Original {:?}", test_var);
let mut test_vec: Vec<&mut TestType> = vec![&mut test_var];
println!("--------------");
{
let test_ref = test_vec.pop().unwrap();
test_ref = TestType::Second(49);
}
println!("Original {:?}", test_var);
}
我有一个枚举类型。我创建了一个变量,并为其分配了该枚举类型的值,我希望该变量成为值“永远”的所有者。有一个Vec,其中包含 mutable 对该类型的引用。然后,我想检索那些引用,并可能修改它们指向的值,以便更改原始变量。有办法吗?
编译上面的代码将导致:
error[E0308]: mismatched types
--> src/main.rs:16:20
|
16 | test_ref = TestType::Second(49);
| ^^^^^^^^^^^^^^^^^^^^
| |
| expected mutable reference, found enum `TestType`
| help: consider mutably borrowing here: `&mut TestType::Second(49)`
|
= note: expected type `&mut TestType`
found type `TestType`
答案 0 :(得分:0)
您有一个引用向量,因此从中获取元素时,变量必须是可变的,然后您取消引用它以分配值:
#[derive(Debug)]
enum TestType {
First,
Second(i32),
}
fn main() {
let mut test_var = TestType::First;
println!("Original {:?}", test_var);
let mut test_vec: Vec<&mut TestType> = vec![&mut test_var];
println!("--------------");
{
let mut test_ref = test_vec.pop().unwrap();
*test_ref = TestType::Second(49);
}
println!("Original {:?}", test_var);
}
结果:
Original First
--------------
Original Second(49)