#封装 #算术 # #版本

nightly wrapping_macros

封装算术的宏

17个版本

使用旧Rust 2015

0.4.13 2017年7月16日
0.4.12 2017年1月26日
0.4.11 2016年11月23日
0.4.9 2016年7月10日
0.4.1 2015年7月10日

#1541 in Rust模式

每月 23 次下载

MIT/Apache

7KB
94

wrapping_macros 构建状态 Cargo

封装算术的宏。

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

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

请参阅此内部线程,了解此crate背后的动机。

注意:此crate使用内部编译器API,因此需要Rust Nightly版本。

Cargo

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

wrapping_macros = "*"

示例

#![feature(plugin)]
#![plugin(wrapping_macros)]

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

注意事项

  • 此crate使用不稳定API,并且仅在Rust Nightly上工作。

  • 您不能在 wrapping! 块内嵌套另一个宏调用。例如,以下内容将无法正常工作

    let x = 41i32;
    wrapping! {
        println!("The answer is {}", x + 1);  //~ ERROR
    }
    

    相反,将宏调用移出块外

    let x = 41i32;
    println!("The answer is {}", wrapping! { x + 1 });
    

无运行时依赖