fn change(a: &mut i32, b: &mut i32) {
let c = *a;
*a = *b;
*b = c;
}
fn main() {
let mut v = vec![1, 2, 3];
change(&mut v[0], &mut v[1]);
}
Когда я компилирую код выше, он имеет ошибку:
error[E0499]: cannot borrow `v` as mutable more than once at a time
--> src/main.rs:9:32
|
9 | change(&mut v[0], &mut v[1]);
| - ^ - first borrow ends here
| | |
| | second mutable borrow occurs here
| first mutable borrow occurs here
Почему компилятор запрещает это? v[0]
и v[1]
занимают разные позиции памяти, поэтому их не опасно использовать вместе. И что мне делать, если я столкнулся с этой проблемой?