4个版本
0.1.2 | 2022年1月19日 |
---|---|
0.1.1 | 2022年1月19日 |
0.1.0 | 2022年1月18日 |
0.0.1 | 2022年1月18日 |
#901 in 过程宏
34KB
892 行
注意! 此crate为实验性,处于开发中。它可能包含会以意外方式更改代码行为的错误。在使用之前,您应审查宏展开的代码,并将您发现的任何错误报告到https://github.com/frxstrem/cain/issues的bug跟踪器。
cain!
宏是一个将顺序Rust分支语句重写为嵌套分支的宏。
这可以在您想要具有不同类型但行为相似的分支时很有用,例如具有公共trait的具体类型,而无需使用运行时trait对象,例如 Box<dyn Trait>
。
这种方法的缺点是,代码量与展开代码中的顺序分支数量呈指数级增长。
MSRV
cain
所需的最小Rust版本是1.57.0(2021年12月)。
示例
代码
fn foo(): Result<i32, bool> { .. }
let a = cain! {
let value = match foo() {
Ok(n) => n,
Err(b) => b,
};
value.to_string()
};
将被 cain!
宏展开成代码
fn foo(): Result<i32, bool> { .. }
let a = {
match foo() {
Ok(n) => {
let value = n;
n.to_string()
},
Err(b) => {
let value = b;
b.to_string()
}
}
};
依赖关系
~1.5MB
~36K SLoC