#分支 #顺序 #嵌套 # #过程 #过程宏 #语句

cain

将顺序分支转换为嵌套分支的过程宏

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 过程宏

MIT 许可证

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