#interior-mutability #mutability #cell #write-once

mutate_once

内部可变,单次写入并可借用的 &T

2 个版本

0.1.1 2019 年 12 月 12 日
0.1.0 2019 年 7 月 25 日

#193缓存

Download history 42699/week @ 2024-03-14 35365/week @ 2024-03-21 40049/week @ 2024-03-28 35018/week @ 2024-04-04 35187/week @ 2024-04-11 36139/week @ 2024-04-18 30066/week @ 2024-04-25 27771/week @ 2024-05-02 27279/week @ 2024-05-09 29753/week @ 2024-05-16 25479/week @ 2024-05-23 71040/week @ 2024-05-30 94885/week @ 2024-06-06 77377/week @ 2024-06-13 117847/week @ 2024-06-20 106341/week @ 2024-06-27

414,656 每月下载量
93 个 crate 中使用(通过 kamadak-exif

BSD-2-Clause 许可

13KB
176

内部可变,单次写入并可借用的 &T

此库提供内部可变性,可以借用作普通的不可变引用 &T,以换取单次写入、多次读取的限制。

std::cell::Cellstd::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");

无运行时依赖