2016-11-10 73 views
1

使用filter時,由於filter does not return ownership而收到引用。然而iter()已經引用你迭代什麼,這樣你得到的代碼看起來是這樣的:這似乎是一個很大的&使用過濾器的習慣用法()

fn main() { 
    let mut vec: Vec<(bool, i32)> = Vec::new(); 
    vec.push((true, 1)); 
    vec.push((false, 2)); 
    vec.push((true, 3)); 
    for &(_, x) in vec.iter().filter(|&&(exists, _)| exists) { 
     println!("{}", x); 
    } 
} 

。這是否被認爲是實施filter()的慣用方式?

回答

4

總之yes。雖然在你的例子中,你可以使用into_iter來獲得一個返回所有權的迭代器。