macro_rules! iterate {
($( $ts:tt )*) => { ... };
}
Expand description
Create an ad hoc iterator.
§Usage
The macro is used just like defining a closure. The return type of it’s body
has to be Option<T>
for some type T. So at the minimum: iterate!{ None }
The expression iterate! {...}
is of type impl Iterator<T>
.
Any captured variables are moved (like with move || {...}
closures).
You can use return
statements in the body of iterate!
.
§Example
use ad_hoc_iterator::iterate;
fn count_to(n: usize) -> impl Iterator<Item = usize> {
let mut i = 0;
iterate! {
if i < n {
i += 1;
Some(i-1)
} else {
None
}
}
}