2 个版本

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

#193缓存

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

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");

无运行时依赖