pub struct LazyLock<T, F = fn() -> T> { /* private fields */ }
🔬This is a nightly-only experimental API. (
lazy_cell
#109736)Expand description
在首次访问时初始化的值。
此类型是线程安全的 LazyCell
,可用于静态。
Examples
#![feature(lazy_cell)]
use std::collections::HashMap;
use std::sync::LazyLock;
static HASHMAP: LazyLock<HashMap<i32, String>> = LazyLock::new(|| {
println!("initializing");
let mut m = HashMap::new();
m.insert(13, "Spica".to_string());
m.insert(74, "Hoyten".to_string());
m
});
fn main() {
println!("ready");
std::thread::spawn(|| {
println!("{:?}", HASHMAP.get(&13));
}).join().unwrap();
println!("{:?}", HASHMAP.get(&74));
// Prints:
// 准备初始化
// Some("Spica")
// Some("Hoyten")
}
RunImplementations§
source§impl<T, F: FnOnce() -> T> LazyLock<T, F>
impl<T, F: FnOnce() -> T> LazyLock<T, F>
sourcepub const fn new(f: F) -> LazyLock<T, F>
🔬This is a nightly-only experimental API. (lazy_cell
#109736)
pub const fn new(f: F) -> LazyLock<T, F>
lazy_cell
#109736)使用给定的初始化函数创建一个新的惰性值。
sourcepub fn into_inner(this: Self) -> Result<T, F>
🔬This is a nightly-only experimental API. (lazy_cell_consume
#109736)
pub fn into_inner(this: Self) -> Result<T, F>
lazy_cell_consume
#109736)使用此 LazyLock
返回存储的值。
如果 Lazy
已初始化,则返回 Ok(value)
,否则返回 Err(f)
。
Examples
#![feature(lazy_cell)]
#![feature(lazy_cell_consume)]
use std::sync::LazyLock;
let hello = "Hello, World!".to_string();
let lazy = LazyLock::new(|| hello.to_uppercase());
assert_eq!(&*lazy, "HELLO, WORLD!");
assert_eq!(LazyLock::into_inner(lazy).ok(), Some("HELLO, WORLD!".to_string()));
Run