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
。