mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-02-06 01:20:29 +08:00
Update Ch10
This commit is contained in:
parent
8b14a90dd2
commit
3e9b31aa71
@ -493,9 +493,9 @@ fn main() {
|
||||
|
||||
类型的行为,是由可在该类型上调用的方法,所组成的。若咱们能于不同类型上调用同样方法时,那么这些不同类型就共用了同样行为。特质定义,是为定义出完成某种目的一套必要行为,而把方法签名编组在一起的一种方式,trait definitions are a way to group method signatures together to define a set of behaviors necessary to accomplish some purpose。
|
||||
|
||||
比如说,这里有着保存了多种类别与数量文本的多个结构体:一个 `NewsArticle` 结构体,保存着归档于特定位置的新闻故事,而一个 `Tweet` 结构体,则可以有着最多 280 个字符,并带有表明其是否为一则新 tweet、或 retweet,抑或是到另一 tweet 答复的元数据。
|
||||
比如说,咱们有着保存了几种类别与数量文本的多个结构体:保存着特定地方新闻报道的 `NewsArticle` 结构体,与最多有 280 个字符、带有表明其是否为一条新推文、retweet 或另一推文回复的 `Tweet` 结构体。
|
||||
|
||||
这里打算构造一个名为 `aggregator` 的媒体聚合器库代码箱,可以显示出可能存储在某个 `NewsArticle` 或 `Tweet` 实例中数据的一些摘要信息来。要完成这个目的,就需要每种类型的摘要,并将通过调用实例上的 `summarize` 方法,请求到摘要信息。下面清单 10-12 给出了表示此行为的一个公共 `Summary` 特质。
|
||||
而咱们则打算构造出一个,可以把可能存储于某个 `NewsArticle` 或 `Tweet` 实例中的数据的摘要信息显式出来的,名为 `aggregator` 的媒体聚合器库代码箱。要实现这个目的,咱们就需要每个类型的摘要,而咱们将通过调用实例上的 `summarize` 方法,请求摘要信息。下面清单 10-12 便给出了表达此行为的一个公开 `Summary` 特质定义。
|
||||
|
||||
|
||||
文件名:`src/lib.rs`
|
||||
@ -507,11 +507,11 @@ pub trait Summary {
|
||||
}
|
||||
```
|
||||
|
||||
*清单 10-12:由 `summarize` 方法提供的行为所组成的一个 `Summary` 特质*
|
||||
*清单 10-12:由 `summarize` 方法提供行为,组成的一个 `Summary` 特质*
|
||||
|
||||
这里使用 `trait` 关键字,及接下来该特质的名字,即此示例中的 `Summary`,声明了一个特质。这里同时将该特质声明为了 `pub`,如此就会跟在接下来将看到的几个示例中那样,那些依赖于此代码箱的其他代码箱,也可利用上这个特质。在花括号里面,就要声明对那些实现了此特质的类型行为加以描述的方法签名,在此示例中,那些方法签名即为 `fn summarize(&self) -> String`。
|
||||
这里咱们使用 `trait` 关键字,与随后的特质名字,即此示例中的 `Summary`,而声明出了一个特质。咱们还把该特质声明为了 `pub`,从而依赖于此代码箱的代码箱,也可利用上这个特质,如同咱们将在下面几个示例中所看到的那样。而在花括号里面,咱们要声明出,对实现了这个特质的那些类型行为加以描述的方法签名,在此示例中便是 `fn summarize(&self) -> String`。
|
||||
|
||||
在方法签名之后,与提供出花括号里的方法实现不同,这里使用了一个分号。实现此特质的各个类型,都必须提供其自己的定制行为,作为该方法的方法体。编译器会强制要求,有着这个 `Summary` 特质的任意类型,都将有着与这个以该签名所定义的,完全一致的 `summarize` 方法。
|
||||
在方法签名之后,咱们没有提供位于花括号里的方法实现,而是使用了一个分号。实现此特质的每种类型,必须为该方法的方法体,提供其自己的定制行为。编译器会强制要求,任何有着 `Summary` 特质的类型,都将要有与此签名完全一致的 `summarize` 方法定义好。
|
||||
|
||||
特质在其代码体中,可以由多个方法:这些方法签名一行一个地列出来,同时每行都已分号结束。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user