iter

Macro iter 

Source
macro_rules! iter {
    ($exp:expr; for $item:ident in $iter:expr) => { ... };
    ($exp:expr; for $item:ident in $iter:expr; if $ifexp:expr) => { ... };
    ($exp:expr; for $item:ident in $iter:expr; if $ifexp:expr; else $elsexp:expr) => { ... };
    ($exp:expr; for $item:ident in $iter:expr; while $whilexp:expr) => { ... };
    ($exp:expr; if $ifexp:expr; for $item:ident in $iter:expr) => { ... };
    ($exp:expr; if $ifexp:expr; else $elsexp:expr; for $item:ident in $iter:expr) => { ... };
    ($exp:expr; while $whilexp:expr; for $item:ident in $iter:expr) => { ... };
}
Expand description

Create an iterator using Python’s list-comprehension style.

§Basic usage

// iter![f(x); for x in iter];
// Create an iterator
let iter = iter![x*x; for x in 1..10];
assert_eq!(iter.collect::<Vec<_>>(), vec![1, 4, 9, 16, 25, 36, 49, 64, 81]);

§Variants

Below are all the possible variants you can use with the iter macro.

§Filter by value

Warning: filter condition uses references

// iter![f(x); for x in iter; if cond(x)];
let iter = iter![x*x; for x in 1..10; if x < &5];
assert_eq!(iter.collect::<Vec<_>>(), vec![1, 4, 9, 16]);
// or:
// iter![f(x); if cond(x); for x in iter];
let iter = iter![x*x; if x < &5; for x in 1..10];
assert_eq!(iter.collect::<Vec<_>>(), vec![1, 4, 9, 16]);
// Same as filter_map

§Conditional mapping

// iter![f(x); for x in iter; if cond(x); else g(x)];
let iter = iter![x*x; for x in 1..10; if x < 5; else 0];
assert_eq!(iter.collect::<Vec<_>>(), vec![1, 4, 9, 16, 0, 0, 0, 0, 0]);
// or
// iter![f(x); if cond(x); else g(x); for x in iter];
let iter = iter![x*x; if x < 5; else 0; for x in 1..10];
assert_eq!(iter.collect::<Vec<_>>(), vec![1, 4, 9, 16, 0, 0, 0, 0, 0]);

§Map while

Warning: while condition uses references

// iter![f(x); for x in iter; while cond(x)];
let iter = iter![x*x; for x in 1..10; while x < &5];
assert_eq!(iter.collect::<Vec<_>>(), vec![1, 4, 9, 16]);
// or
// iter![f(x); while cond(x); for x in iter];
let iter = iter![x*x; while x < &5; for x in 1..10];
assert_eq!(iter.collect::<Vec<_>>(), vec![1, 4, 9, 16]);