我正在努力寻找解决 Rust 中以下问题的方法。我希望能够循环一个(可变)向量,并且仍然能够循环嵌套在外部向量中的同一向量。
struct Test {
value: i32,
}
fn main() {
let mut vec = [Test{value: 1}, Test{value: 2}, Test{value: 3}];
for el in vec.iter_mut(){
println!("{}", el.value);
for a in vec.iter_mut(){
println!("Inner {}", a.value);
}
el.value = 10;
}
}
导致借用检查器引起的错误:
error[E0499]: cannot borrow `vec` as mutable more than once at a time
--> src\main.rs:12:18
|
9 | for el in vec.iter_mut(){
| --------------
| |
| first mutable borrow occurs here
| first borrow later used here
...
12 | for a in vec.iter_mut(){
| ^^^ second mutable borrow occurs here
是的,你不能这样做,即使它看起来几乎是合理的(如果你至少在内循环之前放弃了
el
)。我认为根本问题是 Rust 不区分对 vec
的 elements和
vec
本身的可变访问(例如更改其长度)。
它实际上并不知道
vec.iter_mut()
不会删除或重新排序元素。如果确实如此,那显然会破坏外循环。
根据您想要执行的操作,您可以使用索引(C 风格)或通过操作迭代器来完成。