关于循环的更多信息
正如 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>
。