4 个版本
使用旧的 Rust 2015
| 新版本 0.2.1 | 2024 年 8 月 1 日 |
|---|---|
| 0.2.0 | 2018 年 5 月 2 日 |
| 0.1.1 | 2018 年 4 月 30 日 |
| 0.1.0 | 2018 年 4 月 30 日 |
2 在 #lazy-static 中
每月下载 117 次
10KB
167 行代码(不包括注释)
lateinit
免责声明:此软件包破坏了 Rust 的安全保证。我强烈建议在几乎所有情况下都使用 static_cell 代替。如果这不符合您的需求,请考虑使用 spin::Once、std::sync::Once 或 lazy_static。
[dependencies]
lateinit = "0.2"
示例用法
static SOMETHING: LateInit<String> = LateInit::new();
fn main() {
let environment_value = std::env::var("ENV_VALUE").unwrap();
unsafe { SOMETHING.init(environment_value); }
println!("{}", SOMETHING);
}
设计
LateInit 类型提供了一个不安全接口,用于在运行时初始化静态变量。此软件包的设计目标是提供检查的、一次性初始化和之后的无检查、零成本的访问。目的是在不只需要一次修改用于初始化的情况下,消除对 static mut 的需求。
由于这些设计目标的范围较窄,不支持 is_initialized、init_once 或类似方法。如果您需要检查 LateInit 是否已初始化,您使用它是错误的。
应谨慎且少量地使用此软件包——它破坏了安全性,因为访问实际上是 unsafe 的,尽管没有标记为这样,因为 lateinit 在使用之前没有对值是否已初始化提供任何保证。这是您(程序员)的责任来维护此不变性。如果您不这样做,会发生不好的事情™。强烈建议仅在明显划分的设置代码区域中进行初始化。
功能
#[no_std] 支持。
在特质的实现中有 debug_assert(尤其是在 Deref 中),用于在测试期间捕获错误。如果您对性能有顾虑,可以使用 debug_unchecked 功能标志来关闭 debug_assert。