3. Rust基件:Cell

幻灰龙 幻灰龙 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

上一条: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库,用于单个分配单元和无宏的惰性静态

Fl4me

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!如果你是那种喜欢实际例子的学习者,你会喜欢阅读这本书。

0x0007

leetcoderust-rust-interview-qs:练习用Rust解决的面试问题

leetcode 锈在 Rust 中解决的常见面试问题 简单的 递归问题 : : : 中等的 :

weixin_38506713

Dancing Links 精确覆盖算法的Rust实现_rust_代码_下载

Knuth 的“Dancing Links”算法的实现,用于解决精确覆盖问题。

快撑死的鱼
评论 1
收藏 已收藏
分享
返回顶部
幻灰龙
10x Rust 1,726 成员 130 内容