是否有提供 `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);
}
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);
}