是否有提供 `iter()` 的特征?

Is there a trait supplying `iter()`?

Rust 中是否有提供 iter() 方法的特征?我只找到了特征 IntoIterator,它提供 into_iter().

这里要明确一点:我不想要提供 next()Iterator 特性,而是提供 iter().

的特性

[旁注:有时我对 Rust 库感到很困惑。 Iterator 提供 next(),但 IntoIterator 提供 into_iter()(不提供 next() 并且为了移动约定),而 IntoIter 是一个结构,即实现 Iterator 特征(移动值)。 ]

不,没有提供iter()的特征。

但是,IntoIterator 是在对某些容器的 引用 上实现的。例如,Vec<T>, &Vec<T> and &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);
}