我试图将可变片传递给函数,并在其中的几个循环中使用它。在不重新生成可变片时,在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.你问了两个不同的问题。我试图通过编辑你的文章来解决这两个问题,以避免你被低估(你真正的问题是真的很好)。如果您认为我改变太多了,或者您因为其他原因而不同意编辑,请将其回滚! –