如果我想手动消费一个迭代器,它必须是可变的:
let test = vec![1, 2, 3];
let mut test_mut = test.iter();
while let Some(val) = test_mut.next() {
println!("{:?}", val);
}
但我可以用 for
循环轻松使用它,即使它是不可变的。
let test = vec![1, 2, 3];
let test_imm = test.iter();
for val in test_imm {
println!("{:?}", val);
}
我认为这个方法可行是因为test_imm
被移入了for循环的代码块中,所以test_imm
不再能被外部代码块所使用,且在for循环之前它是(从外部代码块的视角来看)不可变的,然后在for循环之后也无法访问,所以这是可以的。
那么,我的理解正确吗?还需要进一步解释吗?