关于循环的更多信息
正如 Basics 中所提到的,我们可以使用任何实现 IntoIterator 和 for 循环的东西:
let vector = vec!["foo", "bar", "baz"]; // vectors implement IntoIterator
for val in vector {
println!("{}", val);
}
预期输出:
foo
bar
baz
请注意,以这种方式迭代 vector 会消耗它(在 for 循环之后,vector 不能再次使用)。这是因为 IntoIterator::into_iter 移动 self。
IntoIterator 也由 &Vec<T> 和 &mut Vec<T> 实现(分别产生类型为 &T 和 &mut T 的值),这样你就可以通过简单地通过引用来阻止 vector 的移动:
let vector = vec!["foo", "bar", "baz"];
for val in &vector {
println!("{}", val);
}
println!("{:?}", vector);
请注意,val 的类型为 &&str,因为 vector 的类型为 Vec<&str>。