關於迴圈的更多資訊

正如 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>