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。