I have a custom iterator and I would like to optionally call .skip(...)
in the custom .next()
method. However, I get a type error because Skip != Iterator
.
Sample code is as follows:
struct CrossingIter<'a, T> { index: usize, iter: std::slice::Iter<'a, T>, } impl<'a, T: Float> Iterator for CrossingIter<'a, T> { type Item = (usize, T); fn next(&mut self) -> Option<(usize, T)> { let iter = (&mut self.iter).enumerate(); let iter = if self.index == 0 { self.index += 3; iter.skip(3) } else { iter } // lots of code here working with the new iterator iter.next() } }
The issue is that after calling .skip(3)
, the type of iter
has changed. One solution would be to duplicate the // lots of code ...
in each branch of the if
statement, but I'd rather not.
My question is: Is there a way to conditionally apply skip(...)
to an iterator and continue working with it without duplicating a bunch of code?
没有评论:
发表评论