3. Rust基件:Cell

幻灰龙 2021-06-06 00:14:13

上一条: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());
}

 

...全文
2527 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 助教 2023-01-11
  • 打赏
  • 举报
回复
这个有用

1,725

社区成员

发帖
与我相关
我的任务
社区描述
Rust是新一代大规模底层系统平台开发的强力选项,拥有现代的类型系统,精确的生命周期控制,流畅的表达力和错误处理,以及明晰的异步编程范式。
rust 个人社区
社区管理员
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
社区主要目的: 1. 讨论Rust的核心语法语义 2. 讨论Rust的编程范式、最佳实践。 3. 讨论10x创新技术

试试用AI创作助手写篇文章吧