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 在 数据结构
每月下载量249
用于 31 个crate (2直接)
39KB
876 行
♐ rt_ref
Ref
类型具有内部可变性,实现了 Send
和 Sync
。
使用方法
将以下内容添加到 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 License 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您有意提交的任何贡献,根据Apache-2.0许可证定义,将按上述方式双许可,不附加任何额外条款或条件。