Если я попытаюсь дважды перебрать фрагмент, он будет работать нормально:
let a = &[1, 2, 3];
for i in a {
println!("{}", i);
}
for i in a { // works fine
println!("{}", i);
}
Если я попытаюсь выполнить итерацию по вектору дважды, произойдет сбой:
let a = vec![1, 2, 3];
for i in a {
println!("{}", i);
}
for i in a {
println!("{}", i);
}
error[E0382]: use of moved value: 'a'
--> src/main.rs:6:14
|
3 | for i in a {
| - value moved here
...
6 | for i in a {
| ^ value used here after move
|
= note: move occurs because 'a' has type 'std::vec::Vec<i32>', which does not implement the 'Copy' trait
Я вижу, что черта IntoIterator
принимает self
по значению, поэтому для меня имеет смысл, что второй пример не удался. Почему первый пример успешен?