Nếu tôi muốn tiêu thụ một iterator bằng tay, nó phải được có thể thay đổi:Tại sao vòng lặp for không yêu cầu trình lặp có thể thay đổi?
let test = vec![1,2,3];
let mut test_mut = test.iter();
while let Some(val) = test_mut.next() {
println!("{:?}",val);
}
Nhưng tôi hạnh phúc có thể tiêu thụ nó với một vòng lặp for, ngay cả khi nó không thay đổi.
let test_imm = test.iter();
for val in test_imm {
println!("{:?}",val);
}
tôi nghĩ này khoảng làm việc vì test_imm được chuyển vào cho khối loop, vì vậy test_imm không thể được sử dụng bởi các khối bên ngoài nữa và là (từ quan điểm của khối ngoài) không thay đổi cho đến khi vòng lặp for, và sau đó nó không thể tiếp cận, vì vậy nó không sao.
Đúng không? Có nhiều hơn để được giải thích?
Ed: Aha, điều này ít nhiều được giải thích here.