mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2026-08-19 12:43:28 +08:00
Update Ch15
This commit is contained in:
@@ -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`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user