理解 Rust 在向量循环时的借用/引用

问题描述 投票:0回答:1

我正在努力寻找解决 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
rust borrow-checker language-concepts
1个回答
0
投票

是的,你不能这样做,即使它看起来几乎是合理的(如果你至少在内循环之前放弃了

el
)。我认为根本问题是 Rust 不区分对 vec
elements
vec
本身的可变访问(例如更改其长度)。

它实际上并不知道

vec.iter_mut()
不会删除或重新排序元素。如果确实如此,那显然会破坏外循环。

根据您想要执行的操作,您可以使用索引(C 风格)或通过操作迭代器来完成。

© www.soinside.com 2019 - 2024. All rights reserved.