我試圖將可變片傳遞給函數,並在其中的幾個循環中使用它。在不重新生成可變片時,在for循環中移動錯誤
function1
產生錯誤。更改爲function2
或function3
會使錯誤消失,但我不明白function1
和function2
之間的差異。 v
和&mut *v
與我相似。
爲什麼function1
不工作而其他人呢?
fn main() {
let mut v = Vec::new();
function1(&mut v);
function2(&mut v);
function3(&mut v);
}
// Move Error
fn function1(v: &mut [i32]) {
for l in v {}
for l in v {} // <-- Error Here !!!
}
// Works Fine
fn function2(v: &mut [i32]) {
for l in &mut *v {}
for l in &mut *v {}
}
// Works Fine
fn function3(v: &mut [i32]) {
for l in v.iter_mut() {}
for l in v.iter_mut() {}
}
錯誤:
error[E0382]: use of moved value: `v`
--> src/main.rs:12:14
|
11 | for l in v {}
| - value moved here
12 | for l in v {} // <-- Error Here !!!
| ^value used here after move
|
= note: move occurs because `v` has type `&mut [i32]`, which does not implement the `Copy` trait
嗨!你的帖子有兩個小問題:1.你的例子不是最小的,2.你問了兩個不同的問題。我試圖通過編輯你的文章來解決這兩個問題,以避免你被低估(你真正的問題是真的很好)。如果您認爲我改變太多了,或者您因爲其他原因而不同意編輯,請將其回滾! –