#cell #default #reference #copy #mutate #refcell

无std cell-ref

支持通过引用修改的Cell类型

2个版本

0.1.1 2022年5月18日
0.1.0 2022年4月27日

#289 in 无标准库

Apache-2.0

11KB
174

cell-ref

此crate提供了一个Cell类型(类似于标准库中的Cell),并提供了通过引用安全地修改和检查内部值的方法(withwith_mut)。

对于Copy类型,这是通过getset实现的,但通过扩展trait,此crate为不是DefaultCopy的类型提供了相同操作。对于同时是DefaultClone的类型,也提供了一个get方法。

此crate只依赖于core,因此可以在no_std环境中使用。

示例

use cell_ref::{Cell, CellExt};

let c1 = Cell::new(2_u8);
c1.with_mut(|x| *x += 3);
assert!(c1.get() == 5);

let c2 = Cell::new(vec![1, 2, 3]);
c2.with_mut(|v| v.push(4)); // Works even though `Vec` isn't `Copy`
assert_eq!(c2.with(Vec::len), 4);
let v = c2.get(); // Clones the vector

无运行时依赖