Tri*_*rch 6 iterator traits rust
Rust中是否有提供iter()方法的特性?我只发现了IntoIterator供给的特性into_inter().
这里要明确一点:我不想要提供的Iterator特性,而是需要提供next()的特性iter().
[旁注:有时候我对Rust libs非常困惑.Iterator供应next(),但IntoIterator供应into_iter()(不供应next()和移动的约定),虽然IntoIter是一个结构,实现Iterator特征(移动值).]
Fra*_*gné 10
不,没有提供的特质iter().
但是,IntoIterator是在对某些容器的引用上实现的.例如Vec<T>,&Vec<T>并且&mut Vec<T>是实现三个独立的类型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);
}