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]);