2 个不稳定版本
0.3.0 | 2021年2月9日 |
---|---|
0.1.0 | 2019年12月10日 |
#337 in Rust 模式
60,139 每月下载量
在 31 个 31 个 (17 直接) 包中使用
29KB
275 行
auto_ops
轻松实现操作符重载的宏。
此库是从 brianwp3000 的原始库 impl_ops 衍生而来。
此库使得编写多个 use auto_ops::*;
块变得更快,特别是当您需要为输入的拥有和借用变体定义操作符时。
要使用,使用 use auto_ops::*;
导入宏。请记住,您只能在当前包中定义的一个或多个类型之间重载操作符(遵守 Rust 独立规则)。
示例
use auto_ops::*;
#[derive(Clone, Debug, PartialEq)]
struct DonkeyKong {
pub bananas: i32,
}
impl DonkeyKong {
pub fn new(bananas: i32) -> DonkeyKong {
DonkeyKong { bananas: bananas }
}
}
impl_op_ex!(+ |a: &DonkeyKong, b: &DonkeyKong| -> DonkeyKong { DonkeyKong::new(a.bananas + b.bananas) });
impl_op_ex!(+= |a: &mut DonkeyKong, b: &DonkeyKong| { a.bananas += b.bananas });
fn main() {
assert_eq!(DonkeyKong::new(5), DonkeyKong::new(4) + DonkeyKong::new(1));
assert_eq!(DonkeyKong::new(5), DonkeyKong::new(4) + &DonkeyKong::new(1));
assert_eq!(DonkeyKong::new(5), &DonkeyKong::new(4) + DonkeyKong::new(1));
assert_eq!(DonkeyKong::new(5), &DonkeyKong::new(4) + &DonkeyKong::new(1));
let mut dk = DonkeyKong::new(4);
dk += DonkeyKong::new(1);
dk += &DonkeyKong::new(1);
assert_eq!(DonkeyKong::new(6), dk);
}
路线图
随着 Rust 生命周期推断的变化,正在对泛型(类型和生命周期的泛型)实现进行工作。