mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-01-30 06:00:13 +08:00
Update Ch10
This commit is contained in:
parent
92772555ad
commit
3fc662215b
@ -454,7 +454,7 @@ let integer = Some(5);
|
||||
let float = Some(5.0);
|
||||
```
|
||||
|
||||
在 Rust 编译此代码时,他会执行单态化。在那个过程中,编译器会读取这两个 `Option<T>` 实例中用到的值,并识别到两种类型的 `Option<T>`:一个为 `i32`,而另一个为 `f64`。这样一来,编译器就会把 `Option<T>` 的通用定义,展开为两个专门的 `i32` 与 `f64` 定义,由此就用这些特定类型,替换了通用定义。
|
||||
在编译此代码时,Rust 就会执行单态化。在那过程中,编译器会读取这两个 `Option<T>` 实例中用到的值,并识别到两种类型的 `Option<T>`:一个为 `i32`,而另一个为 `f64`。这样一来,编译器就会把 `Option<T>` 的通用定义,展开为两个专门的 `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 {
|
||||
|
Loading…
Reference in New Issue
Block a user