Update Ch15

This commit is contained in:
Unisko PENG
2023-05-12 16:40:35 +08:00
parent a7bbd4e437
commit 597d34d360

View File

@@ -998,9 +998,9 @@ error: test failed, to rerun pass `--lib`
**Having Multiple Owners of Mutable Data by Combining `Rc<T>` and `RefCell<T>`**
使用 `RefCell<T>` 的一种常见方式,便是与 `Rc<T>` 结合用。回顾 `Rc<T>` 实现了某个数据有着多个所有者,但其只给出到那个数据的不可变访问。在有着保存了一个 `RefCell<T>` 的 `Rc<T>`,咱们可得到一个可以有着多个所有者,*且* 咱们可以改变的值。
使用 `RefCell<T>` 的一种常见方式是与 `Rc<T>` 结合使用。回顾一下,`Rc<T>` 实现了某个数据多个所有者,但只提供对数据的不可变访问。如果咱们有一个持有 `RefCell<T>` 的 `Rc<T>`,咱们可得到一个可以有着多个所有者,*且* 咱们可以改变的值。
比如,回顾清单 15-18 中的那个构造列表示例,其中使用 `Rc<T>` 来实现多个列表共用另一列表所有权。由于 `Rc<T>` 保存着一些不可变值,因此一旦咱们创建出了那些清单,就再不能修改其中的任何值。下面就要加入 `RefCell<T>`获得修改列表中那些值的能力。下面清单 15-24 给出了通过在那个 `Cons` 定义中使用 `RefCell<T>`,咱们可以修改存储在所有列表中值了。
比如,回顾清单 15-18 中的构造列表示例,咱们使用 `Rc<T>` 来实现多个列表共用另一列表所有权。由于 `Rc<T>` 保存不可变值,因此一旦咱们创建出列表中的任何值,咱们就不能改变他们。咱们来加入 `RefCell<T>`获得修改列表中值的能力。下面清单 15-24 显示,通过在 `Cons` 定义中使用 `RefCell<T>`,咱们可以修改所有列表中存储的值:
文件名:`src/main.rs`