mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-09 00:43:59 +08:00
修复一些错别字和描述
This commit is contained in:
parent
b6360f9e99
commit
d1567c480d
@ -280,7 +280,7 @@ a little bit /Carol -->
|
||||
- 返回值类型不为 `Self`
|
||||
- 方法没有任何泛型类型参数
|
||||
|
||||
`Self` 关键字是我们要实现 trait 或方法的类型的别名。对象安全对于 trait 对象是必须的,因为一旦有了 trait 对象,就不再知晓实现该 trait 的具体类型是什么了。如果 trait 方法返回具体的 `Self` 类型,但是 trait 对象忘记了其真正的类型,那么方法不可能使用已经忘却的原始具体类型。同理对于泛型类型参数来说,当使用 trait 时其会放入具体的类型参数:此具体类型编程了实现改 trait 的类型的一部分。当使用 trait 对象时其具体类型被抹去了,故无从得知放入泛型参数类型的类型是什么。
|
||||
`Self` 关键字是我们要实现 trait 或方法的类型的别名。对象安全对于 trait 对象是必须的,因为一旦有了 trait 对象,就不再知晓实现该 trait 的具体类型是什么了。如果 trait 方法返回具体的 `Self` 类型,但是 trait 对象忘记了其真正的类型,那么方法不可能使用已经忘却的原始具体类型。同理对于泛型类型参数来说,当使用 trait 时其会放入具体的类型参数:此具体类型变成了实现该 trait 的类型的一部分。当使用 trait 对象时其具体类型被抹去了,故无从得知放入泛型参数类型的类型是什么。
|
||||
|
||||
一个 trait 的方法不是对象安全的例子是标准库中的 `Clone` trait。`Clone` trait 的 `clone` 方法的参数签名看起来像这样:
|
||||
|
||||
|
@ -49,7 +49,7 @@ caveats that the reader needs to be aware of when working with raw pointers.
|
||||
You'd choose to use raw pointers to do something that you can't do with smart
|
||||
pointers or references. I've tried to clarify above /Carol -->
|
||||
|
||||
示例 19-1 展示了如如何从引用同时创建不可变和可变裸指针。
|
||||
示例 19-1 展示了如何从引用同时创建不可变和可变裸指针。
|
||||
|
||||
```rust
|
||||
let mut num = 5;
|
||||
|
@ -16,7 +16,7 @@ newtype 模式可以用于一些其他我们还未讨论的功能,包括静态
|
||||
|
||||
|
||||
|
||||
新类型也可以隐藏其内部的泛型类型。例如,可以提供一个封装了 `HashMap<i32, String>` 的 `People` 类型,用来储存人名以及相应的 ID。使用 `People` 的代码只需与提供的公有 API 交互即可,比如向 `People` 集合增加名字字符串的方法,这样这些代码就无需知道在内部我们将一个 `i32` ID 赋予了这个名字了。newtype 模式是一种实现第十七章 “封装隐藏了实现细节” 部分所讨论的隐藏实现细节的封装的轻量级方法。
|
||||
newtype 也可以隐藏其内部的泛型类型。例如,可以提供一个封装了 `HashMap<i32, String>` 的 `People` 类型,用来储存人名以及相应的 ID。使用 `People` 的代码只需与提供的公有 API 交互即可,比如向 `People` 集合增加名字字符串的方法,这样这些代码就无需知道在内部我们将一个 `i32` ID 赋予了这个名字了。newtype 模式是一种实现第十七章 “封装隐藏了实现细节” 部分所讨论的隐藏实现细节的封装的轻量级方法。
|
||||
|
||||
### 类型别名用来创建类型同义词
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user