From 3fc662215b632ca8a263caa961b9cb1c48bc7c1f Mon Sep 17 00:00:00 2001 From: "Peng Hailin," Date: Thu, 13 Apr 2023 20:41:00 +0800 Subject: [PATCH] Update Ch10 --- src/Ch10_Generic_Types_Traits_and_Lifetimes.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md index 31ef955..ac5100d 100644 --- a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md +++ b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md @@ -454,7 +454,7 @@ let integer = Some(5); let float = Some(5.0); ``` -在 Rust 编译此代码时,他会执行单态化。在那个过程中,编译器会读取这两个 `Option` 实例中用到的值,并识别到两种类型的 `Option`:一个为 `i32`,而另一个为 `f64`。这样一来,编译器就会把 `Option` 的通用定义,展开为两个专门的 `i32` 与 `f64` 定义,由此就用这些特定类型,替换了通用定义。 +在编译此代码时,Rust 就会执行单态化。在那过程中,编译器会读取这两个 `Option` 实例中用到的值,并识别到两种类型的 `Option`:一个为 `i32`,而另一个为 `f64`。这样一来,编译器就会把 `Option` 的通用定义,展开为两个专门的 `i32` 与 `f64` 定义,由此就用这些特定类型,替换了通用定义。 单态化的代码版本,看起来与下面的类似(编译器会使用不同于这里为演示目的而使用的名字): @@ -585,9 +585,9 @@ fn main() { ### 默认实现 -在有些时候,给特质中一些或全部方法以默认行为,而非要求在每种类型上实现全部方法,会是有用的做法。随后,在某个特定类型上实现该特质时,就可以保留或重写各个方法的默认行为。 +给特质中某个或全部方法以默认行为,而非在所有类型上都要求实现全部方法,有的时候会是有用的做法。这样做之后,当咱们在某个特定类型上实现特质时,咱们就可以保留或重写,override,各个方法的默认行为。 -下面清单 10-14 就给那个 `Summary` 特质的 `summarize` 方法,指定了一个默认字符串,而非如同在清单 10-12 中所做的,仅定义该方法签名。 +下面清单 10-14 就给 `Summary` 特质的 `summarize` 方法,指定了一个默认字符串,而非如同在清单 10-12 中咱们曾做的,只定义出方法签名。 文件名:`src/lib.rs` @@ -599,11 +599,11 @@ pub trait Summary { } ``` -*清单 10-14:定义一个带有 `summarize` 方法默认实现的 `Summary` 特质* +*清单 10-14:定义有着 `summarize` 方法默认实现的 `Summary` 特质* -而要使用默认实现来对 `NewsArticle` 的实例进行摘要,就要以 `impl Summary for NewsArticle {}`,指明一个空的 `impl` 代码块。 +而要使用默认实现来对 `NewsArticle` 的实例进行摘要,咱们就要以 `impl Summary for NewsArticle {}`,指明一个空的 `impl` 代码块。 -即便这里不再于 `NewsArticle` 类型上,直接定义那个 `summarize` 方法,这里仍已提供到一个默认实现,并已指明了 `NewsArticle` 类型实现了 `Summary` 特质。由此,这里就可以在某个 `NewsArticle` 实例上,调用这个 `summarize` 方法,如同下面这样: +尽管不再直接在 `NewsArticle` 类型上定义,那个 `summarize` 方法,但咱们是提供了一个默认实现的,并已指明 `NewsArticle` 类型实现了 `Summary` 特质。由此,咱们就可以在某个 `NewsArticle` 实例上,调用这个 `summarize` 方法,如同下面这样: ```rust let article = NewsArticle { @@ -621,9 +621,9 @@ pub trait Summary { 此代码会打印出 `有新文章可读!了解更多......`。 -默认实现的创建,不要求对清单 10-13 中在 `Tweet` 上 `Summary` 的实现,做任何的修改。原因就是对某个默认实现进行重写这种语法,与实现某个不具有默认实现的特质方法的语法,是相同的。 +创建默认实现,不要求咱们对清单 10-13 中,在 `Tweet` 上 `Summary` 的实现,做任何修改。原因是对某个默认实现进行重写的语法,与实现不具有默认实现的特质方法语法相同。 -默认实现可调用同一特质中的其他方法,即使这些别的方法没有默认实现。以这样的方式,特质就可以提供到很多有用功能,而只要求实现者指明特质的一小部分。比如这里就可以将这个 `Summary` 特质,定义为有着一个要求予以实现的 `summarize_author` 方法,并随后定义了一个有着调用了该 `summarize_author` 方法的一个默认实现 `summarize` 方法: +默认实现可调用同一特质中的其他方法,即使那些别的方法没有默认实现。以这种方式,特质就可以提供到很多有用功能,且只要求特质实现者类型,指明其的一小部分方法。比如,咱们就可以将 `Summary` 特质,定义为有着一个要求予以实现的 `summarize_author` 方法,并在随后定义了有着调用了 `summarize_author` 方法默认实现的 `summarize` 方法: ```rust pub trait Summary { @@ -635,7 +635,7 @@ pub trait Summary { } ``` -而要使用此版本的 `Summary`,就只需在某个类型上实现该特质时,对 `summarize_author` 加以定义: +而要使用此版本的 `Summary`,咱们只需在某个类型上实现该特质时,定义出 `summarize_author`: ```rust impl Summary for Tweet {