Как получить изменяемые ссылки на два элемента массива одновременно?
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]
занимают разные позиции в памяти, поэтому использовать их вместе не опасно. И что мне делать, если я сталкиваюсь с этой проблемой?