Update Ch15

This commit is contained in:
Unisko PENG 2023-05-08 15:51:33 +08:00
parent 56488f282d
commit 479e33d411
2 changed files with 2 additions and 2 deletions

View File

@ -136,7 +136,7 @@ fn main() {
请注意结构体更新语法,像赋值一样使用了 `=`;这是由于结构体更新语法迁移了数据,就跟在之前的 ["变量与数据互动方式:迁移"](Ch04_Understanding_Ownership.md#变量与数据互操作方式之一迁移所有权) 小节中看到的那样。在此示例中,在创建了 `user2` 之后,由于变量 `user1` 中的 `username` 字段中的 `String` 值,已被迁移到 `user2` 中了,因此就再也不能使用变量 `user1` 了。若给到 `user2``email``username` 字段都是新的 `String` 值,而因此只使用来自 `user1``active``sign_in_count` 值,那么在创建了 `user2` 之后,`user1` 仍将是有效的。因为 `active``sign_in_count` 的类型,都是实现了 `Copy` 特质的类型,因此就会应用在 [唯栈数据:拷贝](Ch04_Understanding_Ownership.md#唯栈数据拷贝stack-only-data-copy) 小节中的行为表现。
### 使用不带命名字段的元组结构体来创建不同类型
### 使用没有命名字段的元组结构体来创建不同的类型
**Using Tuple Structs without Named Fields to Create Different Types**

View File

@ -381,7 +381,7 @@ impl<T> Deref for MyBox<T> {
`type Target = T;` 语法定义了一个关联类型an associated type`Deref` 特质使用。关联类型是声明泛型参数的一种些许不同的方式,但现在咱们无需担心他们;咱们将在第 19 章中更详细地介绍他们。
这里填入 `deref` 方法函数体的是 `&self.0`,从而 `deref` 就返回了到咱们打算用 `*` 运算符访问的那个值的一个引用;回顾第 5 章的 [运用不带命名字段的元组结构体来创建出不同类型](Ch05_Using_Structs_to_Structure_Related_Data.md#使用不带命名字段的元组结构体来创建不同类型) 小节,那个 `.0` 就是访问了结构体中的首个值。清单 15-9 中在其中 `MyBox<T>` 值上调用了 `*``main` 函数,现在就会编译了,同时那些断言将通过!
我们在 `deref` 方法的主体中填入 `&self.0`,这样 `deref` 就会返回一个我们想用 `*` 操作符访问的值的引用;回顾一下第五章 [“使用没有命名字段的元组结构体来创建不同的类型”](Ch05_Using_Structs_to_Structure_Related_Data.md#使用没有命名字段的元组结构体来创建不同的类型) 小节,`.0` 可以访问一个元组结构体中的第一个值。清单 15-9 中调用 `MyBox<T>` 值的 `main` 函数现在可以编译了,而且断言也通过了!
没有这个 `Deref` 特质,编译器就只能解引用那些 `&` 的引用。那个 `deref` 方法,给到了编译器取得实现了 `Deref` 特质的任意类型值的能力,而调用该特质的 `deref` 方法,就获得了其知道如何解引用的一个 `&` 引用。