3. Rust基件:Cell
上一条:Rust 内部可变性(`Internal mutability`) 下一条:RefCell
对于实现了Copy的类型,可以使用 `Cell<T>`,官方例子:https://doc.rust-lang.org/std/cell/struct.Cell.html
- 获取:如果`T`实现了`Copy`,则可以调用`get`方法,获得T的一份逐bit拷贝
- 设置:使用`set`方法
- 更新:使用`update`设置并返回新值
- 替换:使用`replace`方法
- 可变借用:使用`get_mut`方法获得 Cell 变量的可变借用,该方法继续遵循借用的冲突原则。
改造下官方例子,官方例子里只改变了一次不可变借用的 Cell 成员,稍加改造可以多次修改:
use std::cell::Cell;
struct SomeStruct {
regular_field: u8,
special_field: Cell<u8>,
}
fn main() {
let my_struct = SomeStruct {
regular_field: 0,
special_field: Cell::new(1),
};
// 第1次不可变借用
let x = &my_struct;
// 修改1
x.special_field.set(11);
println!("{}", x.special_field.get());
// 第2次不可变借用
let y = &my_struct;
// 修改2
y.special_field.set(3);
println!("{}", x.special_field.get());
// 修改3
x.special_field.set(10);
println!("{}", x.special_field.get());
}
相关推荐
Once_cell:Rust库,用于单个分配单元和无宏的惰性静态
Once_cell:Rust库,用于单个分配单元和无宏的惰性静态
cell-gc:Rust中的一个很小的GC,带有安全的API
细胞 一个用于Rust的简单垃圾收集器。 目的是帮助您在Rust中快速构建VM。 因此,此GC专为: 安全 不依赖于linters或编译器插件 与高性能实现相一致的API(尽管现在cell-gc并不Swift) 乐趣 注意事项 cell-gc用于VM。 因此,假设是GC所管理的数据实际上不是您的数据; 这是您最终用户的数据。 如果您不希望每个GC管理的对象的每个字段都是公共且可变的,那么cell-gc并不是您项目的GC! API完全不稳定。 我保证我会以破坏代码的方式对其进行更改; 您只需要跟上一切就可以稳定下来。 cell-gc并非旨在支持对单个堆(如Java)的多线程访问。 相反,您可以为每个线程创建一个堆(如JavaScript)。 当前,它不支持许多具有随机生存期的小堆(例如Erlang),但是我对如何到达那里有一些想法。 如何使用它 使用cell_gc有两个部分:
《Rust in Action》 by Timothy Samuel McNamara
Rust in Action 是一本面向想要探索 Rust 编程语言世界的中级程序员的书。它适用于可能已经用尽网络上的免费资料但仍想了解更多信息的人。它与 Rust 编程的其他材料不同,因为它还教您有关系统编程的知识。您将能够更多地了解 CPU 的工作原理、计算机如何计时、指针是什么以及您的网卡和键盘如何告诉 CPU 它们已准备好读取输入。 从系统编程书籍的角度来看,它实际上也是独一无二的 - 因为几乎每个示例都适用于 Windows!如果你是那种喜欢实际例子的学习者,你会喜欢阅读这本书。
leetcoderust-rust-interview-qs:练习用Rust解决的面试问题
leetcode 锈在 Rust 中解决的常见面试问题 简单的 递归问题 : : : 中等的 :
Dancing Links 精确覆盖算法的Rust实现_rust_代码_下载
Knuth 的“Dancing Links”算法的实现,用于解决精确覆盖问题。



