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/