pub struct OnceCell<T> { /* fields omitted */ }A cell which can be written to only once. Not thread safe.
Unlike ::std::cell::RefCell, a OnceCell provides simple &
references to the contents.
use once_cell::unsync::OnceCell;
let cell = OnceCell::new();
assert!(cell.get().is_none());
let value: &String = cell.get_or_init(|| {
"Hello, World!".to_string()
});
assert_eq!(value, "Hello, World!");
assert!(cell.get().is_some());
INIT: OnceCell<T> = OnceCell{inner: <UnsafeCell>::new(None),}
An empty cell, for initialization in a const context.
Creates a new empty cell.
Gets the reference to the underlying value. Returns None
if the cell is empty.
Sets the contents of this cell to value. Returns
Ok(()) if the cell was empty and Err(value) if it was
full.
use once_cell::unsync::OnceCell;
let cell = OnceCell::new();
assert!(cell.get().is_none());
assert_eq!(cell.set(92), Ok(()));
assert_eq!(cell.set(62), Err(62));
assert!(cell.get().is_some());
Gets the contents of the cell, initializing it with f
if the cell was empty.
use once_cell::unsync::OnceCell;
let cell = OnceCell::new();
let value = cell.get_or_init(|| 92);
assert_eq!(value, &92);
let value = cell.get_or_init(|| unreachable!());
assert_eq!(value, &92);
Gets the contents of the cell, initializing it with f if
the cell was empty. If the cell was empty and f failed, an
error is returned.
use once_cell::unsync::OnceCell;
let cell = OnceCell::new();
assert_eq!(cell.get_or_try_init(|| Err(())), Err(()));
assert!(cell.get().is_none());
let value = cell.get_or_try_init(|| -> Result<i32, ()> {
Ok(92)
});
assert_eq!(value, Ok(&92));
assert_eq!(cell.get(), Some(&92))
Formats the value using the given formatter. Read more
Returns the "default value" for a type. Read more
Performs copy-assignment from source. Read more