pub trait ForwardIterExt: Iterator + Sized {
// Provided method
fn forward(self) -> ForwardIter<Self> ⓘ { ... }
}
Expand description
Ensure that side effects in iterators always run forward
Provided Methods§
Sourcefn forward(self) -> ForwardIter<Self> ⓘ
fn forward(self) -> ForwardIter<Self> ⓘ
Ensure that side effects in iterators always run forward
Space complexity
- call
Iterator
methods: O(1) - call
DoubleEndedIterator
methods: O(n)
§Examples
Fail case:
ⓘ
let mut i = 0;
let x: Vec<_> = (0..4).map(|_| { i += 1; i }).rev().collect();
assert_eq!(x, [4, 3, 2, 1]); // fail!
Rewrite to:
let mut i = 0;
let x: Vec<_> = (0..4).map(|_| { i += 1; i }).forward().rev().collect();
assert_eq!(x, [4, 3, 2, 1]); // success!
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.