#lazy-evaluation #macro #generate #demand #aux

on_demand

一个用于生成按需使用的辅助宏的宏

1 个不稳定版本

0.1.0 2021年2月23日

#2833Rust 模式

MIT/Apache

11KB
90

on_demand

Rust

这个 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_aon_demand_get_a_muton_demand_into_a。当调用 on_demand_get_a 时,它会判断 a 是否已经被计算。如果是,则返回其数据的引用,否则调用 generate_on_demand_macro 的第二个参数中给出的表达式,然后将返回的值赋给 a。其他两个生成的宏执行类似操作,但返回对 a 的可变引用或接受 a 的所有权。

总的来说,这意味着使用表达式按需懒加载 a

依赖项