以下是我的代码示例,它读取一个目录,遍历文件,并在每个文件末尾添加注释的简化版本...
这个示例展示了一个`Vec
这个示例展示了一个`Vec
Vec::iter
返回一个 Iter
结构体,该结构体实现了 Iterator
,具体如下:
impl<'a, T> Iterator for Iter<'a, T> {
type Item = &'a T;
}
Iterator::next
返回的值类型将是指向向量中项目的引用。vec.into_iter()
,您的代码将正常工作:fn main() {
let vec = vec![Some(true), None];
vec.into_iter()
.filter_map(|o| o)
.count();
}
IntoIter
结构体,该结构体以不同的方式实现Iterator
,返回对象本身:impl<T> Iterator for IntoIter<T> {
type Item = T;
}
into_iter
消耗 向量,将整个向量的所有权转移给 IntoIter
结构体。然后,该结构体允许将每个项目的所有权交给 filter_map
调用。Clone
,还可以克隆每个项。这允许向量保持所有权并创建新项:fn main() {
let vec = vec![Some(true), None];
vec.iter()
.cloned()
.filter_map(|o| o)
.count();
}
fn main() {
let my_vec = vec![Some(true), None];
println!("{}", my_vec.iter().filter_map(|&x| x).count());
}
filter_map
时,您可以将&x
映射到x
,这样您的代码就能正常工作。Copy
的类型。