Если я хочу, чтобы потреблять итератор вручную, он должен быть изменяемым:Почему цикл for не требует изменчивого итератора?
let test = vec![1,2,3];
let mut test_mut = test.iter();
while let Some(val) = test_mut.next() {
println!("{:?}",val);
}
Но я могу с удовольствием потреблять его для цикла, даже если это неизменное.
let test_imm = test.iter();
for val in test_imm {
println!("{:?}",val);
}
Я думаю это примерно работает, потому что test_imm перемещается в течение тела цикла, поэтому test_imm не может быть использован внешним блоком не больше, и (с точки зрения внешнего блока) неизменяемый до цикла for, а затем он недоступен, так что все в порядке.
Это правильно? Есть ли еще объяснение?
Ред.: Ага, это более или менее объяснено. here.