#wrapping #arithmetic #macro #proc #proc-macro #cleaner

wrapping_proc_macro

一个用于更干净包装算术的过程宏

1个稳定版本

使用旧的Rust 2015

1.0.0 2022年6月30日

#1818 in 过程宏

MIT 许可证

7KB
89

wrapping_macros

一个用于作用域包装算术的宏。

wrapping! { .. } 块内的任何代码将被如下转换

  • a + b 变为 a.wrapping_add(b). 类似地,对于 -*/%<<>>
  • a += b 变为 a = a.wrapping_add(b). 类似地,对于 -=*=/=%=<<=>>=
  • -a 变为 a.wrapping_neg().

Cargo

将以下内容添加到你的 Cargo.toml

wrapping_macros = "*"

示例

let a = 128u8;
let b = wrapping! { a * 2 };

assert_eq!(b, 0);
let mut a = 250u8;
let mut b = 4u8;
let mut c = 100u8;
wrapping! {
    a += 10;
    b -= 10;
    c *= 10;
}

assert_eq!(a, 4);
assert_eq!(b, 250);
assert_eq!(c, 232);
use wrapping_macros::wrapping;

fn main() {
    let mut sum = 0u8;
    wrapping! {
        for x in 0u8..50 {
            sum += x;
        }
    }
}
assert_eq!(sum, 201);

注意

你无法在 wrapping! 块内嵌套另一个宏调用。例如,以下将不会工作

let x = 128u8;
wrapping! {
    println!("The answer is {}", x + 128) // Error
}

相反,将宏调用移出 wrapping!

let x = 128u8;
println!("The answer is {}", wrapping! { x + 128 })

灵感来源于 lfairy 的 wrapping_macros crate

依赖关系

~1.5MB
~34K SLoC