Wenn ich einen Iterator von Hand konsumieren will, hat es wandelbar sein:Warum benötigt eine for-Schleife keinen veränderbaren Iterator?
let test = vec![1,2,3];
let mut test_mut = test.iter();
while let Some(val) = test_mut.next() {
println!("{:?}",val);
}
Aber ich es glücklich für Schleife mit einem konsumieren kann, auch wenn es unveränderlich ist.
let test_imm = test.iter();
for val in test_imm {
println!("{:?}",val);
}
I denken das funktioniert in etwa weil test_imm in der for-Schleife-Block bewegt wird, so test_imm kann nicht durch den äußeren Block mehr verwendet werden und ist (aus der Sicht des äußeren Blocks) unveränderlich bis zur for-Schleife, und dann ist es unzugänglich, also ist es in Ordnung.
Ist das richtig? Gibt es mehr zu erklären?
Ed: Aha, dies ist mehr oder weniger erklärt here.