pub struct Lazy<T, F = fn() -> T> { /* private fields */ }
Expand description
A value which is initialized on the first access.
This type is thread-safe and can be used in statics.
Example
use std::collections::HashMap;
use once_cell::sync::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§
§impl<T, F> Lazy<T, F>
impl<T, F> Lazy<T, F>
pub fn into_value(this: Lazy<T, F>) -> Result<T, F>
pub fn into_value(this: Lazy<T, F>) -> Result<T, F>
Consumes this Lazy
returning the stored value.
Returns Ok(value)
if Lazy
is initialized and Err(f)
otherwise.
§impl<T, F> Lazy<T, F>where
F: FnOnce() -> T,
impl<T, F> Lazy<T, F>where F: FnOnce() -> T,
pub fn force(this: &Lazy<T, F>) -> &T
pub fn force(this: &Lazy<T, F>) -> &T
Forces the evaluation of this lazy value and
returns a reference to the result. This is equivalent
to the Deref
impl, but is explicit.
Example
use once_cell::sync::Lazy;
let lazy = Lazy::new(|| 92);
assert_eq!(Lazy::force(&lazy), &92);
assert_eq!(&*lazy, &92);
pub fn force_mut(this: &mut Lazy<T, F>) -> &mut T
pub fn force_mut(this: &mut Lazy<T, F>) -> &mut T
Forces the evaluation of this lazy value and
returns a mutable reference to the result. This is equivalent
to the Deref
impl, but is explicit.
Example
use once_cell::sync::Lazy;
let mut lazy = Lazy::new(|| 92);
assert_eq!(Lazy::force_mut(&mut lazy), &mut 92);
pub fn get(this: &Lazy<T, F>) -> Option<&T>
pub fn get(this: &Lazy<T, F>) -> Option<&T>
Gets the reference to the result of this lazy value if
it was initialized, otherwise returns None
.
Example
use once_cell::sync::Lazy;
let lazy = Lazy::new(|| 92);
assert_eq!(Lazy::get(&lazy), None);
assert_eq!(&*lazy, &92);
assert_eq!(Lazy::get(&lazy), Some(&92));
pub fn get_mut(this: &mut Lazy<T, F>) -> Option<&mut T>
pub fn get_mut(this: &mut Lazy<T, F>) -> Option<&mut T>
Gets the reference to the result of this lazy value if
it was initialized, otherwise returns None
.
Example
use once_cell::sync::Lazy;
let mut lazy = Lazy::new(|| 92);
assert_eq!(Lazy::get_mut(&mut lazy), None);
assert_eq!(&*lazy, &92);
assert_eq!(Lazy::get_mut(&mut lazy), Some(&mut 92));
Trait Implementations§
impl<T, F> RefUnwindSafe for Lazy<T, F>where F: RefUnwindSafe, OnceCell<T>: RefUnwindSafe,
impl<T, F> Sync for Lazy<T, F>where F: Send, OnceCell<T>: Sync,
Auto Trait Implementations§
impl<T, F> Send for Lazy<T, F>where F: Send, T: Send,
impl<T, F> Unpin for Lazy<T, F>where F: Unpin, T: Unpin,
impl<T, F> UnwindSafe for Lazy<T, F>where F: UnwindSafe, T: UnwindSafe,
Blanket Implementations§
§impl<T, U> AsBindGroupShaderType<U> for Twhere
U: ShaderType,
&'a T: for<'a> Into<U>,
impl<T, U> AsBindGroupShaderType<U> for Twhere U: ShaderType, &'a T: for<'a> Into<U>,
§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
Return the
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere T: Default,
§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates
Self
using data from the given World