1个稳定版本
使用旧的Rust 2015
1.0.0 | 2022年6月30日 |
---|
#1818 in 过程宏
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