1 个不稳定版本
0.1.0 | 2021年2月23日 |
---|
#2833 在 Rust 模式
11KB
90 行
on_demand
这个 Rust 包提供了一个宏,用于生成按需使用的辅助宏。
[dependencies]
on_demand = "0.1"
示例
use on_demand::generate_on_demand_macro;
fn foo() {
generate_on_demand_macro!(a: usize = None, {
println!("a");
1
});
generate_on_demand_macro!(b: usize = None, {
println!("b");
let a_data = on_demand_get_a!();
2 + *a_data
});
generate_on_demand_macro!(c: usize = None, {
println!("c");
let a_data = on_demand_get_a!();
let b_data = on_demand_get_b!();
3 + *a_data + *b_data
});
let c_data = on_demand_get_c!();
assert_eq!(*c_data, 6);
}
在变量(例如,a
)上调用 generate_on_demand_macro
后,将生成三个新的宏 on_demand_get_a
、on_demand_get_a_mut
和 on_demand_into_a
。当调用 on_demand_get_a
时,它会判断 a
是否已经被计算。如果是,则返回其数据的引用,否则调用 generate_on_demand_macro
的第二个参数中给出的表达式,然后将返回的值赋给 a
。其他两个生成的宏执行类似操作,但返回对 a
的可变引用或接受 a
的所有权。
总的来说,这意味着使用表达式按需懒加载 a
。