2 个版本
0.1.1 | 2019 年 12 月 12 日 |
---|---|
0.1.0 | 2019 年 7 月 25 日 |
#193 在 缓存
414,656 每月下载量
在 93 个 crate 中使用(通过 kamadak-exif)
13KB
176 行
内部可变,单次写入并可借用的 &T
此库提供内部可变性,可以借用作普通的不可变引用 &T
,以换取单次写入、多次读取的限制。
与 std::cell::Cell
或 std::cell::RefCell
不同,可以从 MutOnce<T>
中获取一个普通的不可变引用 &T
。一旦获取了不可变引用,该值就永远不能再被修改(即使所有引用都已丢弃)。
使用案例包括缓存获取器和延迟评估。
用法
在源目录中运行 "cargo doc" 以生成 API 参考。它也可在网上找到,见 https://docs.rs/mutate_once。
以下是一个示例
struct Container {
expensive: MutOnce<String>,
}
impl Container {
fn expensive(&self) -> &str {
if !self.expensive.is_fixed() {
let mut ref_mut = self.expensive.get_mut();
*ref_mut += "expensive";
// Drop `ref_mut` before calling `get_ref`.
}
// A plain reference can be returned to the caller
// unlike `Cell` or `RefCell`.
self.expensive.get_ref()
}
}
let container = Container { expensive: MutOnce::new(String::new()) };
assert_eq!(container.expensive(), "expensive");