#lazy #thunk #deref #expr #lazy-evaluation #smart-pointers #nothing

nightly lazy

懒求值类型和宏

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日
Download history 8/week @ 2023-10-19 34/week @ 2023-10-26 11/week @ 2023-11-02 13/week @ 2023-11-09 17/week @ 2023-11-16 24/week @ 2023-11-23 66/week @ 2023-11-30 24/week @ 2023-12-07 25/week @ 2023-12-14 26/week @ 2023-12-21 8/week @ 2023-12-28 21/week @ 2024-01-04 15/week @ 2024-01-11 34/week @ 2024-01-18 18/week @ 2024-01-25 28/week @ 2024-02-01

每月下载量 95
用于 stream

MIT 许可证

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