铁锈中是否有提供iter()方法的特性?我只找到了特性IntoIterator,它提供了into_iter()。
这里要说明的是:我不想要提供next()的next()特性,而是提供iter()的特性。
西德诺特:有时我很困惑于铁锈的利伯斯。Iterator提供next(),但IntoIterator提供into_iter() (不提供next()和用于移动的约定),而IntoIter是一个实现Iterator特性(移动值)的结构。
发布于 2016-09-24 11:50:08
不,没有提供iter()的特性。
但是,IntoIterator是在对某些容器的引用上实现的。例如,&mut Vec是实现IntoIterator的三种不同类型,您会注意到它们都映射到不同的迭代器。实际上,Vec::iter()和Vec::iter_mut()只是分别与&Vec::into_iter()和&mut Vec::into_iter()等价的方便方法。
fn foo(_x: std::slice::Iter<i32>) {}
fn main() {
let v = vec![1, 2, 3];
foo(v.iter());
foo((&v).into_iter()); // iter() exists because this is awkward
}如果您想要编写一个泛型的、可以转换为迭代器来遍历引用的容器上的函数,您可以这样做:
fn foo<'a, I: IntoIterator<Item=&'a i32>>(_x: I) {}
fn main() {
let v = vec![1, 2, 3];
foo(&v);
}https://stackoverflow.com/questions/39675949
复制相似问题