9 个版本
使用旧的 Rust 2015
| 0.5.3 | 2015年3月11日 | 
|---|---|
| 0.5.2 | 2015年2月9日 | 
| 0.5.0 | 2014年12月16日 | 
| 0.4.1 | 2014年12月2日 | 
| 0.3.2 | 2014年11月19日 | 
每月下载量 95
用于 stream
10KB
179 行代码,不包括注释
Lazy
Rust 中的懒求值。
示例
fn expensive() -> i32 {
    println!("I am only evaluated once!"); 7
}
fn main() {
    let a = lazy!(expensive());
    // Thunks are just smart pointers!
    assert_eq!(*a, 7); // "I am only evaluated once." is printed here
    let b = [*a, *a]; // Nothing is printed.
    assert_eq!(b, [7, 7]);
}
API
lazy!($expr)
展开为 Thunk::new(|| { $expr })
Thunk::new(|| ->T)
接受一个 FnOnce 闭包,创建一个延迟计算。
Thunk::force()
强制评估 thunk,使后续访问变得便宜。值以未装箱形式存储。
Thunk::unwrap()
消费并强制评估 thunk,并返回包含的值。
Thunk::deref()/Thunk::deref_mut()
通过评估闭包或从缓存中获取值来从 thunk 中获取值。允许您通过自动解引用调用 thunk 上的方法,就像它是一个包含值的实例一样。
还有与 SyncThunk 相等的 API,它是 Send + Sync,可用于安全的并发懒加载,除了它们是通过使用 sync_lazy! 或通过执行 use lazy::SyncThunk as Thunk 并使用 lazy! 创建的。
依赖项
~19KB