#switch #控制流 # #模式匹配

fallthrough

类似于 C 语言 switch 语句的带 fallthrough 的模式匹配

3 个版本

0.1.2 2023 年 7 月 21 日
0.1.1 2023 年 7 月 21 日
0.1.0 2023 年 7 月 21 日

#20 in #模式匹配

MIT/Apache

7KB

fallthrough

Build Status API reference Crates.io License

此软件包提供了一个 fallthrough 宏,允许通过 arms 进行带 fallthrough 的模式匹配,类似于 C 语言 switch

use fallthrough::fallthrough;

fn fall(scrutinee: u32) -> u32 {
    let mut ret: u32 = 0;

    fallthrough!(scrutinee,
        val @ (0 | 63..) => ret = val + 7,
        'one: 1 => ret += 8,
        'two: 2 => ret += 9,
        'three: 3 if true => { ret += 10; break 'end },
        'four: 4 => ret = 42,
        'five: 5 => { ret += 1; break 'seven },
        'six: 6 => ret = 3,
        'seven: _ => ret *= 2,
        'end
    );
    ret
}

fn main() {
    assert_eq!(fall(0), 34);
    assert_eq!(fall(1), 27);
    assert_eq!(fall(2), 19);
    assert_eq!(fall(3), 10);
    assert_eq!(fall(4), 86);
    assert_eq!(fall(5), 2);
    assert_eq!(fall(6), 6);
    assert_eq!(fall(7), 0);
    assert_eq!(fall(64), 98);
}

无运行时依赖