Is there in Rust a Trait which supplies the iter()
method? I only found the trait IntoIterator
, which supplies into_iter()
.
Just to be clear here: I do not want the Iterator
trait, which supplies next()
, but a trait which supplies iter()
.
[ sidenote: Sometimes I'm very confused by the Rust libs. Iterator
supplies next()
, but IntoIterator
supplies into_iter()
(not supplying next()
and for convention with moving), while IntoIter
is a struct, that implements the Iterator
trait (moving values). ]
No, there is no trait that provides iter()
.
However, IntoIterator
is implemented on references to some containers. For example, Vec<T>
, &Vec<T>
and &mut Vec<T>
are three separate types that implement IntoIterator
, and you'll notice that they all map to different iterators. In fact, Vec::iter()
and Vec::iter_mut()
are just convenience methods equivalent to &Vec::into_iter()
and &mut Vec::into_iter()
respectively.
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
}
If you want to write a function that is generic over containers that can be converted into an iterator that iterates over references, you can do so like this:
fn foo<'a, I: IntoIterator<Item=&'a i32>>(_x: I) {}
fn main() {
let v = vec![1, 2, 3];
foo(&v);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With