mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2024-12-26 12:50:42 +08:00
Update Ch15
This commit is contained in:
parent
56488f282d
commit
479e33d411
@ -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**
|
||||
|
||||
|
@ -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` 方法,就获得了其知道如何解引用的一个 `&` 引用。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user