pub struct Lazy<T, F = fn() -> T, R = Spin> { /* private fields */ }
Expand description
A value which is initialized on the first access.
This type is a thread-safe Lazy
, and can be used in statics.
§Examples
use std::collections::HashMap;
use spin::Lazy;
static HASHMAP: Lazy<HashMap<i32, String>> = Lazy::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:
// ready
// initializing
// Some("Spica")
// Some("Hoyten")
}
Implementations§
source§impl<T, F, R> Lazy<T, F, R>
impl<T, F, R> Lazy<T, F, R>
sourcepub fn as_mut_ptr(&self) -> *mut T
pub fn as_mut_ptr(&self) -> *mut T
Retrieves a mutable pointer to the inner data.
This is especially useful when interfacing with low level code or FFI where the caller explicitly knows that it has exclusive access to the inner data. Note that reading from this pointer is UB until initialized or directly written to.
source§impl<T, F: FnOnce() -> T, R: RelaxStrategy> Lazy<T, F, R>
impl<T, F: FnOnce() -> T, R: RelaxStrategy> Lazy<T, F, R>
Trait Implementations§
impl<T, F: Send> Sync for Lazy<T, F>
Auto Trait Implementations§
impl<T, F = fn() -> T, R = Spin> !Freeze for Lazy<T, F, R>
impl<T, F = fn() -> T, R = Spin> !RefUnwindSafe for Lazy<T, F, R>
impl<T, F, R> Send for Lazy<T, F, R>
impl<T, F = fn() -> T, R = Spin> !Sync for Lazy<T, F, R>
impl<T, F, R> Unpin for Lazy<T, F, R>
impl<T, F, R> UnwindSafe for Lazy<T, F, R>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more