I tried:
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 of these work; how should I do it?
I get errors like:
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
You may want to re-read The Rust Programming Language, specifically the sections on:
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 add50
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 ini
before we can use the+=
operator.
In addition, you can call the iter_mut
method:
let mut v = vec![100, 32, 57];
for i in v.iter_mut() {
*i += 50;
}
See also:
Note that your variable is not a vector. It is an array.