From b57e74f077a19157706a0caa59db6d93d017f91d Mon Sep 17 00:00:00 2001 From: Xu Qiaolun Date: Thu, 6 Jun 2019 03:20:49 +0800 Subject: [PATCH 1/3] =?UTF-8?q?Fix:=20=E4=BD=8D=E4=BA=8E=E5=86=92=E5=8F=B7?= =?UTF-8?q?=E5=90=8E=E9=9D=A2=E8=80=8C=E4=B8=8D=E6=98=AF=E5=88=86=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ch10-02-traits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch10-02-traits.md b/src/ch10-02-traits.md index 357ec31..e59aaa2 100644 --- a/src/ch10-02-traits.md +++ b/src/ch10-02-traits.md @@ -196,7 +196,7 @@ pub fn notify(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` 的类型: From a00ac444bc83331bde46a3a212025af659c2054c Mon Sep 17 00:00:00 2001 From: Xu Qiaolun Date: Thu, 6 Jun 2019 03:24:20 +0800 Subject: [PATCH 2/3] =?UTF-8?q?Fix:=20=E5=AD=A6=E4=B9=A0=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E5=A4=A7=E9=87=8F=E4=BE=9D=E8=B5=96....?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ch10-02-traits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch10-02-traits.md b/src/ch10-02-traits.md index e59aaa2..601221c 100644 --- a/src/ch10-02-traits.md +++ b/src/ch10-02-traits.md @@ -260,7 +260,7 @@ fn returns_summarizable() -> impl Summary { 这个签名表明,“我要返回某个实现了 `Summary` trait 的类型,但是不确定其具体的类型”。在例子中返回了一个 `Tweet`,不过调用方并不知情。 -这有什么用呢?在第十三章中,我们会学些两个大量依赖 trait 的功能:闭包和迭代器。这些功能创建只有编译器知道的类型,或者是非常非常长的类型。`impl Trait` 允许你简单的说 “返回一个 `Iterator`” 而无需写出实际的冗长的类型。 +这有什么用呢?在第十三章中,我们会学习两个大量依赖 trait 的功能:闭包和迭代器。这些功能创建只有编译器知道的类型,或者是非常非常长的类型。`impl Trait` 允许你简单的说 “返回一个 `Iterator`” 而无需写出实际的冗长的类型。 不过这只适用于返回单一类型的情况。例如,这样就 **不行**: From 491fb61c8dcd9ee5bc801e22bf4928db2462c0a7 Mon Sep 17 00:00:00 2001 From: Xu Qiaolun Date: Thu, 6 Jun 2019 16:23:05 +0800 Subject: [PATCH 3/3] =?UTF-8?q?Fix:=20value=E5=BA=94=E8=AF=A5=E6=98=AFOpti?= =?UTF-8?q?on=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ch13-01-closures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch13-01-closures.md b/src/ch13-01-closures.md index 278f942..d273255 100644 --- a/src/ch13-01-closures.md +++ b/src/ch13-01-closures.md @@ -321,7 +321,7 @@ struct Cacher > 注意:函数也都实现了这三个 `Fn` trait。如果不需要捕获环境中的值,则可以使用实现了 `Fn` trait 的函数而不是闭包。 -`value` 是 `Option` 类型的。在执行闭包之前,`value` 将是 `None`。如果使用 `Cacher` 的代码请求闭包的结果,这时会执行闭包并将结果储存在 `value` 字段的 `Some` 成员中。接着如果代码再次请求闭包的结果,这时不再执行闭包,而是会返回存放在 `Some` 成员中的结果。 +`value` 是 `Option` 类型的。在执行闭包之前,`value` 将是 `None`。如果使用 `Cacher` 的代码请求闭包的结果,这时会执行闭包并将结果储存在 `value` 字段的 `Some` 成员中。接着如果代码再次请求闭包的结果,这时不再执行闭包,而是会返回存放在 `Some` 成员中的结果。 刚才讨论的有关 `value` 字段逻辑定义于示例 13-10: