LazyCell in core::cell - Rust (original) (raw)

Struct LazyCell

1.80.0 · Source

pub struct LazyCell<T, F = fn() -> T> { /* private fields */ }

Expand description

A value which is initialized on the first access.

For a thread-safe version of this struct, see std::sync::LazyLock.

§Examples

use std::cell::LazyCell;

let lazy: LazyCell<i32> = LazyCell::new(|| {
    println!("initializing");
    92
});
println!("ready");
println!("{}", *lazy);
println!("{}", *lazy);

// Prints:
//   ready
//   initializing
//   92
//   92

Source§

1.80.0 (const: 1.80.0) · Source

Creates a new lazy value with the given initializing function.

§Examples
use std::cell::LazyCell;

let hello = "Hello, World!".to_string();

let lazy = LazyCell::new(|| hello.to_uppercase());

assert_eq!(&*lazy, "HELLO, WORLD!");

Source

🔬This is a nightly-only experimental API. (lazy_cell_into_inner #125623)

Consumes this LazyCell returning the stored value.

Returns Ok(value) if Lazy is initialized and Err(f) otherwise.

§Examples
#![feature(lazy_cell_into_inner)]

use std::cell::LazyCell;

let hello = "Hello, World!".to_string();

let lazy = LazyCell::new(|| hello.to_uppercase());

assert_eq!(&*lazy, "HELLO, WORLD!");
assert_eq!(LazyCell::into_inner(lazy).ok(), Some("HELLO, WORLD!".to_string()));

1.80.0 · Source

Forces the evaluation of this lazy value and returns a reference to the result.

This is equivalent to the Deref impl, but is explicit.

§Examples
use std::cell::LazyCell;

let lazy = LazyCell::new(|| 92);

assert_eq!(LazyCell::force(&lazy), &92);
assert_eq!(&*lazy, &92);

Source

🔬This is a nightly-only experimental API. (lazy_get #129333)

Forces the evaluation of this lazy value and returns a mutable reference to the result.

§Examples
#![feature(lazy_get)]
use std::cell::LazyCell;

let mut lazy = LazyCell::new(|| 92);

let p = LazyCell::force_mut(&mut lazy);
assert_eq!(*p, 92);
*p = 44;
assert_eq!(*lazy, 44);

Source§

Source

🔬This is a nightly-only experimental API. (lazy_get #129333)

Returns a mutable reference to the value if initialized, or None if not.

§Examples
#![feature(lazy_get)]

use std::cell::LazyCell;

let mut lazy = LazyCell::new(|| 92);

assert_eq!(LazyCell::get_mut(&mut lazy), None);
let _ = LazyCell::force(&lazy);
*LazyCell::get_mut(&mut lazy).unwrap() = 44;
assert_eq!(*lazy, 44);

Source

🔬This is a nightly-only experimental API. (lazy_get #129333)

Returns a reference to the value if initialized, or None if not.

§Examples
#![feature(lazy_get)]

use std::cell::LazyCell;

let lazy = LazyCell::new(|| 92);

assert_eq!(LazyCell::get(&lazy), None);
let _ = LazyCell::force(&lazy);
assert_eq!(LazyCell::get(&lazy), Some(&92));

1.80.0 · Source§

1.80.0 · Source§

Source§

Creates a new lazy value using Default as the initializing function.

1.80.0 · Source§

Source§

The resulting type after dereferencing.

Source§

Dereferences the value.