关于循环的更多信息

正如 Basics 中所提到的,我们可以使用任何实现 IntoIteratorfor 循环的东西:

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>