#match #macro #switch #statement

switch_statement

一个简单的 switch 语句宏

3 个版本 (1 个稳定版)

1.0.0 2020 年 8 月 14 日
0.1.1 2020 年 8 月 14 日
0.1.0 2020 年 8 月 14 日

#1719Rust 模式

每月 21 次下载

自定义许可证

5KB

Rust 的 Switch 语句

一个简单的宏,用于模拟 Rust 中的 switch 语句。

crates.io Docs License

描述

switch! 宏看起来与 match 类似。但它不是模式匹配,而是将每个左侧的表达式解释为表达式而不是模式。一个用例是匹配使用按位或连接的常量。该宏的输出是一个带有 if 守卫的 match

示例

const A: u32 = 1 << 0;
const B: u32 = 1 << 1;
const C: u32 = 1 << 2;

fn flag_string(input: u32) -> &'static str {
    switch! { input;
        A => "A",
        // bitwise OR
        A | B => "A and B",
        A | B | C => "A and B and C",
        B | C => "B and C",
        _ => "other"
    }
}

上述代码展开为

const A: u32 = 1 << 0;
const B: u32 = 1 << 1;
const C: u32 = 1 << 2;

fn flag_string(input: u32) -> &'static str {
    match input {
        v if v == A => "A",
        v if v == A | B => "A and B",
        v if v == A | B | C => "A and B and C",
        v if v == B | C => "B and C",
        _ => "other"
    }
}

无运行时依赖