#lazy-evaluation #static #macro-based

slazy

一个简单、小巧、无标准库、基于宏的 Rust 惰性静态库

1 个不稳定版本

0.1.0 2023年11月28日

#6 in #macro-based

MIT 许可证

5KB

SLazy 💄

License GitHub issues Build status

一个简单、小巧、无标准库、基于宏的 Rust 惰性静态库。

[请求功能/报告错误]

安装

cargo add slazy 或在你的 Cargo.toml 中添加以下内容

[dependencies]
slazy = "*"

示例

use slazy::slazy;

slazy! {
    pub FOO: u32 = {
        println!("Evaluating FOO");
        42
    };

    BAR: u32 = 1337;
}

println!("FOO: {}", *FOO); // Evaluates FOO
println!("{}", *FOO); // Gets the value of FOO without evaluating it again
println!("{}", *BAR); // Evaluates BAR

线程安全

[!WARNING] 如果你想在多线程环境中使用 SLazy,应在创建任何线程之前初始化惰性静态变量。这是因为惰性静态变量在某些场景下可能不是线程安全的,可能因为数据竞争。

示例

use slazy::{slazy, init};

slazy! {
    pub FOO: u32 = {
        println!("Evaluating FOO");
        42
    };
}

init!(FOO); // or `_ = *FOO;`

std::thread::spawn(|| {
    println!("{}", *FOO); // Safe to use FOO in this thread
});

许可证

本项目采用 MIT 许可证

无运行时依赖