3 个不稳定版本
0.2.2 | 2024年2月8日 |
---|---|
0.2.1 | 2024年2月8日 |
0.1.0 | 2024年1月26日 |
#111 in 缓存
每月21次下载
14KB
280 行
编译时引用稳定的 LRU 缓存
主要代码是从 lru-rs 复制的,非常感谢该项目。
实现这个项目的动机主要是让 LRUCache
允许通过 get
方法获取多个不可变引用。目前,这个 crate 正处于积极开发阶段。该 crate 的目的是验证新的设计模式,并希望将其应用于更多的集合库,最好是包括 std。至于这个库本身,我更希望其提出的新的 API 被合并到 上游。
主要思路是将值操作权限与数据结构本身分离。 博客文章 详细阐述了该思路。您也可以查看 uitest,它解释了 API 设计目标。
示例
以下是一个简单的示例,展示了 LRUCache
的主要功能。
let mut cache = LruCache::new(NonZeroUsize::new(2).unwrap());
cache.scope(|mut cache, mut perm| {
assert_eq!(cache.put("apple", "red", &mut perm), None);
assert_eq!(cache.put("banana", "yellow", &mut perm), None);
assert_eq!(cache.put("lemon", "yellow", &mut perm), Some("red"));
let colors: Vec<_> = ["apple", "banana", "lemon", "watermelon"]
.iter()
.map(|k| cache.get(k, &perm))
.collect();
assert!(colors[0].is_none());
assert_opt_eq(colors[1], "yellow");
assert_opt_eq(colors[2], "yellow");
assert!(colors[3].is_none());
});