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