【发布时间】:2015-04-02 09:39:16
【问题描述】:
我想使用库函数交换切片data的元素,但由于多次借用,它不起作用:
use std::mem;
fn example() {
let mut data = [1, 2, 3];
let i = 0;
let j = 1;
mem::swap(&mut data[i], &mut data[j]);
}
error[E0499]: cannot borrow `data[_]` as mutable more than once at a time
--> src/lib.rs:8:29
|
8 | mem::swap(&mut data[i], &mut data[j]);
| --------- ------------ ^^^^^^^^^^^^ second mutable borrow occurs here
| | |
| | first mutable borrow occurs here
| first borrow later used by call
|
可以手动完成,但我不认为每次都使用这段代码很好:
let temp = data[i];
data[i] = data[j];
data[j] = temp;
有没有其他解决方案可以交换切片中的元素?
【问题讨论】:
-
“可以像往常一样手动完成” ...
Copy类型 - 否则将导致“无法移出索引内容”。