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

标签 iterator rust traits

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

这里要明确一点:我不想要 Iterator特性,提供 next() , 但提供 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);
}

关于iterator - 是否有提供 `iter()` 的特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39675949/

相关文章:

iterator - 容器迭代器的抽象

generics - 是否可以在具有通用参数和返回类型的结构中使用闭包?

rust - 派生特征会导致意外的编译器错误,但手动实现有效

Rust 在泛型类型参数上调用 trait 方法

scala - 与 Scala 中的存在类型一起使用时,通过 TypeTag 确定类型参数的运行时类型

typescript - 遍历 Typescript Map

c++ - boost any_range 性能:std::prev(iterator) 与 --iterator

rust - 一个二进制文件在断点处停止,另一个没有 - 没有定义断点

rust - 如何为具有特征对象成员的结构实现调试特征?

java - 为什么Java中的列表集合不使用new关键字创建迭代器对象