Struct LazyCell
struct LazyCell<T, F = fn() -> T> { ... }
A value which is initialized on the first access.
For a thread-safe version of this struct, see std::sync::LazyLock.
Poisoning
If the initialization closure passed to LazyCell::new panics, the cell will be poisoned.
Once the cell is poisoned, any threads that attempt to access this cell (via a dereference
or via an explicit call to force()) will panic.
This concept is similar to that of poisoning in the std::sync::poison module. A key
difference, however, is that poisoning in LazyCell is unrecoverable. All future accesses of
the cell from other threads will panic, whereas a type in std::sync::poison like
std::sync::poison::Mutex allows recovery via PoisonError::into_inner().
Examples
use LazyCell;
let lazy: = new;
println!;
println!;
println!;
// Prints:
// ready
// initializing
// 92
// 92
Implementations
impl<T, F> LazyCell<T, F>
fn get_mut(this: &mut LazyCell<T, F>) -> Option<&mut T>Returns a mutable reference to the value if initialized. Otherwise (if uninitialized or poisoned), returns
None.Examples
use LazyCell; let mut lazy = new; assert_eq!; let _ = force; *get_mut.unwrap = 44; assert_eq!;fn get(this: &LazyCell<T, F>) -> Option<&T>Returns a reference to the value if initialized. Otherwise (if uninitialized or poisoned), returns
None.Examples
use LazyCell; let lazy = new; assert_eq!; let _ = force; assert_eq!;
impl<T, F: FnOnce() -> T> LazyCell<T, F>
const fn new(f: F) -> LazyCell<T, F>Creates a new lazy value with the given initializing function.
Examples
use LazyCell; let hello = "Hello, World!".to_string; let lazy = new; assert_eq!;const fn into_inner(this: Self) -> Result<T, F>Consumes this
LazyCellreturning the stored value.Returns
Ok(value)ifLazyis initialized andErr(f)otherwise.Panics
Panics if the cell is poisoned.
Examples
use LazyCell; let hello = "Hello, World!".to_string; let lazy = new; assert_eq!; assert_eq!;fn force(this: &LazyCell<T, F>) -> &TForces the evaluation of this lazy value and returns a reference to the result.
This is equivalent to the
Derefimpl, but is explicit.Panics
If the initialization closure panics (the one that is passed to the
new()method), the panic is propagated to the caller, and the cell becomes poisoned. This will cause all future accesses of the cell (viaforce()or a dereference) to panic.Examples
use LazyCell; let lazy = new; assert_eq!; assert_eq!;fn force_mut(this: &mut LazyCell<T, F>) -> &mut TForces the evaluation of this lazy value and returns a mutable reference to the result.
Panics
If the initialization closure panics (the one that is passed to the
new()method), the panic is propagated to the caller, and the cell becomes poisoned. This will cause all future accesses of the cell (viaforce()or a dereference) to panic.Examples
use LazyCell; let mut lazy = new; let p = force_mut; assert_eq!; *p = 44; assert_eq!;
impl<P, T> Receiver for LazyCell<T, F>
impl<T> Any for LazyCell<T, F>
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for LazyCell<T, F>
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for LazyCell<T, F>
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> From for LazyCell<T, F>
fn from(t: T) -> TReturns the argument unchanged.
impl<T, F = fn() -> T> Freeze for LazyCell<T, F>
impl<T, F = fn() -> T> RefUnwindSafe for LazyCell<T, F>
impl<T, F = fn() -> T> Sync for LazyCell<T, F>
impl<T, F> Send for LazyCell<T, F>
impl<T, F> Unpin for LazyCell<T, F>
impl<T, F> UnsafeUnpin for LazyCell<T, F>
impl<T, F> UnwindSafe for LazyCell<T, F>
impl<T, F: FnOnce() -> T> Deref for LazyCell<T, F>
impl<T, F: FnOnce() -> T> DerefMut for LazyCell<T, F>
impl<T, U> Into for LazyCell<T, F>
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for LazyCell<T, F>
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for LazyCell<T, F>
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>
impl<T: Default> Default for LazyCell<T>
fn default() -> LazyCell<T>Creates a new lazy value using
Defaultas the initializing function.
impl<T: fmt::Debug, F> Debug for LazyCell<T, F>
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result