3 个版本 (1 个稳定版)
1.0.0 | 2020 年 8 月 14 日 |
---|---|
0.1.1 | 2020 年 8 月 14 日 |
0.1.0 | 2020 年 8 月 14 日 |
#1719 在 Rust 模式
每月 21 次下载
5KB
Rust 的 Switch 语句
一个简单的宏,用于模拟 Rust 中的 switch
语句。
描述
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"
}
}