5个版本
0.1.4 | 2023年11月2日 |
---|---|
0.1.3 | 2023年11月2日 |
0.1.2 | 2023年11月2日 |
0.1.1 | 2023年10月30日 |
0.1.0 | 2023年10月30日 |
177 在 #lazy-evaluation 中排名
每月下载 28 次
用于 lazy-attribute
10KB
86 行
lazy-attributes
提供了用于简化与懒加载函数工作的属性宏。
带有 #[lazy_ref]
装饰的函数只在第一次被调用时执行。在后续调用中,将返回缓存的返回值。
用法
使用 lazy_attribute::lazy_ref
,你可以注释一个你想要懒加载的函数
use lazy_attribute::lazy_ref;
#[lazy_ref]
fn get_string() -> String {
println!("Called once!");
String::from("Hello, world!")
}
fn main() {
println!("{}", get_string()); // Outputs: Called once! Hello, world!
println!("{}", get_string()); // Outputs: Hello, world!
}
函数第一次被调用时,将被评估,并将结果缓存。后续调用将返回缓存的結果。
lazy_ref
宏大致将 get_string
函数转换为
static __lazy_static_get_string: OnceCell<String> = OnceCell::new();
fn get_string() -> &'static String {
__lazy_static_get_string.get_or_init(|| {
println!("Called once!");
String::from("Hello, world!")
})
}
启用 async
功能后,lazy_ref
也可以与异步函数一起使用
use lazy_attribute::lazy_ref;
#[lazy_ref]
async fn get_string() -> String {
println!("Called once!");
String::from("Hello, world!")
}
#[tokio::main]
async fn main() {
println!("{}", get_string().await); // Outputs: Called once! Hello, world!
println!("{}", get_string().await); // Outputs: Hello, world!
}
注意事项
lazy_*
宏不支持带参数的函数。你将得到一个错误消息,告诉你不支持参数。
软件包特性
async
- 启用对懒加载异步函数的支持。
依赖关系
~3MB
~57K SLoC