6 个版本

0.2.1 2024年1月28日
0.2.0 2022年7月15日
0.1.3 2022年7月14日
0.1.2 2022年6月30日

#201数据结构

Download history 75/week @ 2024-04-10 76/week @ 2024-04-17 101/week @ 2024-04-24 78/week @ 2024-05-01 76/week @ 2024-05-08 83/week @ 2024-05-15 104/week @ 2024-05-22 144/week @ 2024-05-29 67/week @ 2024-06-05 75/week @ 2024-06-12 70/week @ 2024-06-19 56/week @ 2024-06-26 1/week @ 2024-07-03 61/week @ 2024-07-10 103/week @ 2024-07-17 84/week @ 2024-07-24

每月下载量249
用于 31 个crate (2直接)

MIT/Apache

39KB
876

♐ rt_ref

Crates.io docs.rs CI Coverage Status

Ref 类型具有内部可变性,实现了 SendSync

这些类型由 rt_maprt_vec 共享。

使用方法

将以下内容添加到 Cargo.toml

rt_ref = "0.2.1" # or
rt_ref = { version = "0.2.1", features = ["unsafe_debug"] }

代码中

use rt_ref::{Cell, Ref, RefMut};

let a = 1;

// Insert a value into a collection, wrapped with `Cell`.
let mut v = Vec::new();
v.push(Cell::new(a));

let v = v; // v is now compile-time immutable.
let a = v.get(0).map(|cell| RefMut::new(cell.borrow_mut()));
a.map(|mut a| {
    *a += 2;
});

let a = v.get(0).map(|cell| Ref::new(cell.borrow()));
assert_eq!(Some(3), a.map(|a| *a));

特性

"unsafe_debug":

借用的引用在格式化时会使用内部类型的 Debug 实现进行格式化。

use rt_ref::{Cell, Ref, RefMut};

let mut v = Vec::new();
v.push(Cell::new("a"));

#[cfg(not(feature = "unsafe_debug"))]
assert_eq!(
    r#"[Cell { flag: 0, inner: UnsafeCell { .. } }]"#,
    format!("{v:?}")
);
#[cfg(feature = "unsafe_debug")]
assert_eq!(r#"[Cell { flag: 0, inner: "a" }]"#, format!("{v:?}"));

许可协议

许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则您有意提交的任何贡献,根据Apache-2.0许可证定义,将按上述方式双许可,不附加任何额外条款或条件。

无运行时依赖

特性