#closures #hash-map #typemap #anymap

fn-map

HashMap的抽象。使用闭包来计算和存储值。

2个版本

0.1.1 2024年6月15日
0.1.0 2024年4月21日

#555 in 数据结构

Download history 21/week @ 2024-04-23 1/week @ 2024-05-21 172/week @ 2024-06-11 9/week @ 2024-06-18 24/week @ 2024-07-02

每月106次下载

MIT 许可证

11KB
200

FnMap

FnMap是对HashMap的抽象,类似于TypeMap。但它使用闭包的类型(每个闭包的类型在Rust中是唯一的)作为键,并存储产生的。允许像有效的低成本依赖注入容器一样使用。

用法

use fn_map::FnMap;

let map = FnMap::new();

fn one() -> i32 {
    println!("one computed");
    1
}

// get or compute(and insert) value using given closure. The closure depends on value of `one` function to compute its output.
let a = *map.get(|| map.get(one) + 1);
dbg!(a);

// b is *not* a because each closure's type is unique
let b = *map.get(|| map.get(one) + 1);
dbg!(b);

// get or compute(and insert) value using give function. But will not compute since it is computed already when producing a.
let c = *map.get(one);
dbg!(c);

将输出

one computed
a = 2
b = 2
c = 1

许可证

MIT

依赖项

~2–7.5MB
~39K SLoC