#macro #tuple #utilities #into #let-chain

无 std batch_oper

batch_oper 为某些操作提供了一些批量操作宏

25 个稳定版本

2.3.1 2020 年 12 月 18 日
2.2.0 2020 年 11 月 25 日
1.13.0 2020 年 11 月 5 日
1.11.1 2020 年 7 月 11 日

#1626Rust 模式

Download history 7/week @ 2024-04-01 117/week @ 2024-07-01

每月 117 次下载

MIT 许可证

45KB
640 代码行

batch_oper

重命名为 libsugar


Rust
batch_oper 为某些操作提供了一些批量操作宏

请参阅 https://docs.rs/batch_oper/
这里仅作简要介绍

用法

  • 基本
    • batch ||
      bop!(|| 4; == 2, > 3);
      
      等同于
      4 == 2 || 4 > 3
      
    • batch &&
      bop!(&& 4; == 2, > 3);
      
      等同于
      4 == 2 && 4 > 3
      
    • !
      bop!(|| a; == 1;!, == 2);
      
      等同于
      1 == a || a == 2
      
    • 批量操作
      bop!(&& 5; > ; 2, 3, 6;!);
      
      等同于
      5 > 2 && 5 > 3 && 6 > 5
      
  • 设置
    let mut a = 1;
    bop!(= a; + 1, - 2;!, * 3);
    
    等同于
    let mut a = 1;
    a = a + 1;
    a = 2 - a;
    a = a * 3;
    
  • bop! { let a|u8 = 1, mut b = 2 }
    
    等同于
    let a: u8 = 1;
    let mut b = 2;
    
  • 链式让
    • 基本
      let a = Some(1);
      let b = Some(2);
      
      let _: i32 = bop!(match && Some(va) = a, Some(vb) = b => {
          1
      } else {
          2
      });
      
      等同于
      let a = Some(1);
      let b = Some(2);
      
      let _: i32 = loop {
          if let Some(va) = a {
              if let Some(vb) = b {
                  break { 1 };
              }
          }
          break { 2 };
      };
      
    • 布尔值
      let _: bool = bop!(bool match && Some(va) = a, Some(vb) = b => {
          1
      } else {
          2
      });
      
      等同于
      let _: bool = loop {
          if let Some(va) = a {
              if let Some(vb) = b {
                  { 1 };
                  break true;
              }
          }
          { 2 };
          break false;
      };
      
    • !循环
      let _: i32 = bop!(!loop match && Some(va) = a, Some(vb) = b => {
          1
      } else {
          2
      });
      
      等同于
      let _: i32 = if let Some(va) = a {
          if let Some(vb) = b {
              { 1 }
          } else { { 2 } }
      } else  { { 2 } }
      
    • !循环 布尔值
      let _: bool = bop!(!loop bool match && Some(va) = a, Some(vb) = b => {
          1
      } else {
          2
      });
      
      等同于
      let _: bool = if let Some(va) = a {
          if let Some(vb) = b {
              { 1 }; true
          } else { { 2 }; false }
      } else  { { 2 }; false }
      
  • let r = 0..5;
    let c = bop!(&1, &2 => in && r);
    
    等同于
    let r = 0..5;
    let c = r.contains(&1) && r.contains(&2);
    
    • ||
      let c = bop!(&1, &2 => in || r);
      
      等同于
      let c = r.contains(&1) || r.contains(&2);
      
    • 自定义函数名
      let c = bop!(has; &1, &2 => in && r);
      
      等同于
      let c = r.has(&1) && r.has(&2);
      
  • 使用
    let v = (1, 2);
    let v2 = (3, 4);
    using!((a, b) = v, (c, d) = v2; {
      println!("{} {} {} {}", a, b, c, d)
    })
    
    等同于
    let v = (1, 2);
    let v2 = (3, 4);
    {
      let (a, b) = v;
      let (c, d) = v2;
      {
        println!("{} {} {} {}", a, b, c, d)
      }
    }
    

依赖

~5MB
~70K SLoC