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]
占据不同的内存位置,所以同时使用它们并不会有危险。如果我遇到这个问题该怎么办?
<[T]>::swap()
。 - Chayim Friedman