#static #lazy-evaluation #macro

无 std lazy_static

一个用于在 Rust 中声明惰性计算的静态变量的宏

38 个版本 (9 个稳定版)

使用旧的 Rust 2015

1.5.0 2024 年 6 月 21 日
1.4.0 2019 年 8 月 26 日
1.3.0 2019 年 2 月 27 日
1.2.0 2018 年 11 月 4 日
0.1.1 2014 年 11 月 23 日

#5 in Rust 模式

Download history 2258974/week @ 2024-05-03 2293174/week @ 2024-05-10 2333636/week @ 2024-05-17 2210183/week @ 2024-05-24 2387668/week @ 2024-05-31 2429433/week @ 2024-06-07 2366179/week @ 2024-06-14 2644474/week @ 2024-06-21 2414476/week @ 2024-06-28 2601878/week @ 2024-07-05 2678604/week @ 2024-07-12 2728024/week @ 2024-07-19 2694244/week @ 2024-07-26 2799448/week @ 2024-08-02 3102189/week @ 2024-08-09 2482450/week @ 2024-08-16

11,569,195 每月下载量
用于 44,830 个 crate(9,410 直接使用)

MIT/Apache 许可证

15KB
125

lazy-static.rs

一个用于在 Rust 中声明惰性计算的静态变量的宏。

使用此宏,可以拥有需要在运行时执行代码才能初始化的 static 变量。这包括任何需要堆分配的东西,如向量或哈希表,以及任何需要非 const 函数调用的计算。

Rust Latest version Documentation License

最低支持的 rustc

1.40.0+

此版本已在 CI 中明确测试,并且只能在新的次要版本中升级。有关最低支持版本的所有更改将在发行说明中列出。

入门

lazy-static.rs 在 crates.io 上可用。建议您在那里查找最新发布的版本,以及最新文档的链接。

在最后一次更新此 README 时,最新发布的版本可以像这样使用

将以下依赖项添加到您的 Cargo 清单...

[dependencies]
lazy_static = "1.5.0"

...并查看 文档 了解如何使用它。

示例

use lazy_static::lazy_static;
use std::collections::HashMap;

lazy_static! {
    static ref HASHMAP: HashMap<u32, &'static str> = {
        let mut m = HashMap::new();
        m.insert(0, "foo");
        m.insert(1, "bar");
        m.insert(2, "baz");
        m
    };
}

fn main() {
    // First access to `HASHMAP` initializes it
    println!("The entry for `0` is \"{}\".", HASHMAP.get(&0).unwrap());

    // Any further access to `HASHMAP` just returns the computed value
    println!("The entry for `1` is \"{}\".", HASHMAP.get(&1).unwrap());
}

标准库

现在可以使用 std::sync::OnceLock 在 Rust 的标准库中轻松复制此 crate 的功能。上面的示例也可以写成

use std::collections::HashMap;
use std::sync::OnceLock;

fn hashmap() -> &'static HashMap<u32, &'static str> {
    static HASHMAP: OnceLock<HashMap<u32, &str>> = OnceLock::new();
    HASHMAP.get_or_init(|| {
        let mut m = HashMap::new();
        m.insert(0, "foo");
        m.insert(1, "bar");
        m.insert(2, "baz");
        m
    })
}

fn main() {
    // First access to `HASHMAP` initializes it
    println!("The entry for `0` is \"{}\".", hashmap().get(&0).unwrap());

    // Any further access to `HASHMAP` just returns the computed value
    println!("The entry for `1` is \"{}\".", hashmap().get(&1).unwrap());
}

许可证

根据您的选择,许可协议可以是

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在本作品中并由您提交的任何贡献,将按上述方式双许可,不附加任何额外条款或条件。

依赖项

~37KB