如何在 for 循环中进行可变借用?

How can I do a mutable borrow in a for loop?

我试过了:

fn main() {
    let mut vec = [1, 2, 3];
    
    for mut x in &vec { *x = 3; }
    for mut &x in &vec { x = 3; }
    for mut *x in &vec { x = 3; }
    for mut x in mut &vec { *x = 3; }
    for mut x in &(mut vec) { *x = 3; }
}

None 这些作品;我应该怎么做?

我收到如下错误:

  • mut must be attached to each individual binding
  • expected identifier, found *
  • expected expression, found keyword mut
  • cannot assign to *x which is behind a & reference

您可能需要重新阅读 The Rust Programming Language,特别是以下部分:

We can also iterate over mutable references to each element in a mutable vector in order to make changes to all the elements. The for loop in Listing 8-9 will add 50 to each element.

let mut v = vec![100, 32, 57];
for i in &mut v {
    *i += 50;
}

Listing 8-9: Iterating over mutable references to elements in a vector

To change the value that the mutable reference refers to, we have to use the dereference operator (*) to get to the value in i before we can use the += operator.

另外,可以调用iter_mut方法:

let mut v = vec![100, 32, 57];
for i in v.iter_mut() {
    *i += 50;
}

另请参阅:


请注意,您的变量不是向量。它是一个数组。