[][src]Macro sugars::c

macro_rules! c {
    ($e:expr; $i:pat in $iter:expr) => { ... };
    ($e:expr; $i:pat in $iter:expr, if $cond:expr) => { ... };
    ($e:expr; $i1:pat in $iter1:expr, $i2:pat in $iter2:expr) => { ... };
    ($e:expr; $i1:pat in $iter1:expr, $i2:pat in $iter2:expr, if $cond:expr) => { ... };
    ($e:expr; $i1:pat in $iter1:expr, $i2:pat in $iter2:expr, $i3:pat in $iter3:expr) => { ... };
    ($e:expr; $i1:pat in $iter1:expr, $i2:pat in $iter2:expr, $i3:pat in $iter3:expr, if $cond:expr) => { ... };
}

Generic lazy iterator comprehensions.

Nice to have when what you collecting are not in std::collections or not in the std at all.

Limitations

  • Only 3 nested comprehensions

Examples:

use sugars::c;
let w: Vec<_> = c![x; x in 1..10].collect();
let z: HashSet<_> = c!{x; x in 1..10, if x%2 == 0}.collect();