Merge pull request #315 from gotoxu/master

修复trait一节的少量描述错误
This commit is contained in:
KaiserY 2019-06-08 23:58:26 +08:00 committed by GitHub
commit 1ee8b287c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 3 deletions

View File

@ -196,7 +196,7 @@ pub fn notify<T: Summary>(item: T) {
}
```
这与之前的例子相同不过稍微冗长了一些。trait bound 与泛型参数声明在一起,位于尖括号中分号的后面。因为 `T` 的 trait bound我们可以传递任何 `NewsArticle``Tweet` 的实例调用 `notify`。用任何其他类型,比如 `String``i32`,调用该函数的代码将不能编译,因为这些类型没有实现 `Summary`
这与之前的例子相同不过稍微冗长了一些。trait bound 与泛型参数声明在一起,位于尖括号中的冒号后面。因为 `T` 的 trait bound我们可以传递任何 `NewsArticle``Tweet` 的实例调用 `notify`。用任何其他类型,比如 `String``i32`,调用该函数的代码将不能编译,因为这些类型没有实现 `Summary`
何时应该使用这种形式而不是 `impl Trait` 呢?虽然 `impl Trait` 适用于短小的例子trait bound 则适用于更复杂的场景。例如,比如需要获取两个实现了 `Summary` 的类型:
@ -260,7 +260,7 @@ fn returns_summarizable() -> impl Summary {
这个签名表明,“我要返回某个实现了 `Summary` trait 的类型,但是不确定其具体的类型”。在例子中返回了一个 `Tweet`,不过调用方并不知情。
这有什么用呢?在第十三章中,我们会学两个大量依赖 trait 的功能:闭包和迭代器。这些功能创建只有编译器知道的类型,或者是非常非常长的类型。`impl Trait` 允许你简单的说 “返回一个 `Iterator`” 而无需写出实际的冗长的类型。
这有什么用呢?在第十三章中,我们会学两个大量依赖 trait 的功能:闭包和迭代器。这些功能创建只有编译器知道的类型,或者是非常非常长的类型。`impl Trait` 允许你简单的说 “返回一个 `Iterator`” 而无需写出实际的冗长的类型。
不过这只适用于返回单一类型的情况。例如,这样就 **不行**

View File

@ -321,7 +321,7 @@ struct Cacher<T>
> 注意:函数也都实现了这三个 `Fn` trait。如果不需要捕获环境中的值则可以使用实现了 `Fn` trait 的函数而不是闭包。
`value``Option<i32>` 类型的。在执行闭包之前,`value` 将是 `None`。如果使用 `Cacher` 的代码请求闭包的结果,这时会执行闭包并将结果储存在 `value` 字段的 `Some` 成员中。接着如果代码再次请求闭包的结果,这时不再执行闭包,而是会返回存放在 `Some` 成员中的结果。
`value``Option<u32>` 类型的。在执行闭包之前,`value` 将是 `None`。如果使用 `Cacher` 的代码请求闭包的结果,这时会执行闭包并将结果储存在 `value` 字段的 `Some` 成员中。接着如果代码再次请求闭包的结果,这时不再执行闭包,而是会返回存放在 `Some` 成员中的结果。
刚才讨论的有关 `value` 字段逻辑定义于示例 13-10