5 个稳定版本
1.0.5 | 2023 年 11 月 24 日 |
---|---|
1.0.3 | 2023 年 11 月 23 日 |
#587 在 Rust 模式 中
每月 33 次下载
7KB
cond
cond 是一个 Rust 宏,用于以类似 match 的语法作为多个 if-else 语句的优雅替代方案。
我从空的 Go switch 语句 得到这个想法。我想,如果它在 Rust 中实现会很有趣,所以我就在 Rust 社区 Discord 服务器上询问是否可行。他们告诉我,除非你在 match 中使用非常丑陋的语法,否则不可能实现,Esper89(GitHub 上的致谢)为此创建了一个宏。我添加了一些测试和文档,这就是我的第一个 Rust crate。
示例
use cond::cond;
fn main() {
let a = 195;
cond! {
a < 5 => println!("a is less than 5"),
a == 195 => {
println!("this is the way")
},
a > 10 => println!("a is greater than 10"),
// The conditions are executed by order: if one condition is true, conditions below will not get evaluated
};
let b = "";
let result = cond! { // Or use it as a block to return a value
b == "something" => false,
b.chars().count() > 10 => true,
a < 10000 => true,
_ => false // You must add a default with the return type if you want to return
};
println!("result: {}", result);
}
用法
您可以通过以下方式添加该 crate:
cargo add cond
或者,只需将 8 行宏添加到您的项目中
macro_rules! cond {
($($condition:expr => $value:expr),* $(, _ => $default:expr)? $(,)?) => {
match () {
$(() if $condition => $value,)*
() => ($($default)?),
}
};
}
致谢
感谢 Esper89 在 Rust 社区 Discord 服务器中基本上创建了整个宏。