Se voglio consumare un iteratore a mano, deve essere mutabile:Perché un ciclo for non richiede un iteratore mutabile?
let test = vec![1,2,3];
let mut test_mut = test.iter();
while let Some(val) = test_mut.next() {
println!("{:?}",val);
}
ma posso tranquillamente consumare con un ciclo for, anche se è immutabile.
let test_imm = test.iter();
for val in test_imm {
println!("{:?}",val);
}
I pare questo funziona all'incirca perché test_imm viene spostato nella per il blocco del ciclo, in modo test_imm non può essere utilizzato dal blocco esterno più ed è (dal punto di vista del blocco esterno) immutabile fino al ciclo for, e quindi è inaccessibile, quindi va bene.
È giusto? C'è altro da spiegare?
Ed: Aha, questo è più o meno spiegato here.