#nested #iterator #loops #syntax

for_ch

将嵌套的for循环扁平化

3个版本

0.1.3 2021年8月15日
0.1.2 2021年8月14日
0.1.1 2021年8月14日
0.1.0 2021年8月14日

#1785 in 进程宏

MIT/Apache

10KB
196

for_ch

for_ch 命名为 "for_each", "for_chain"(甚至 "4ch"),该crate提供了一个宏来扁平化嵌套的for循环和if-let。

示例

for_ch! {
    for x in 0..10;                         // forall x in 0..10,
    // you can add a label before `for`
    for y in x..10, for _ in 0..5;          // forall y in x..x+5, 
    // zipping
    if let Some(z) = foo(x, y).await?;      // exists z. Some(z) = foo(x, y).await?
    // if let guard
    if x - y < z;                           // satisfies x - y < z
    // guard
    println!("x = {}, y = {}, z = {}", x, y, z);
}

将会展开为

for x in 0..10 {
    for y in (x..10).zip(0..5) {
        if let Some(z) = foo(x, y).await? {
            if x - y < z {
                println!("x = {}, y = {}, z = {}", x, y, z);
            }
        }
    }
}

依赖

~1.5MB
~35K SLoC