Update Ch10

This commit is contained in:
Unisko PENG
2023-04-14 14:59:25 +08:00
parent 1eb4bde4b0
commit 0e1e01e3f1

View File

@@ -721,20 +721,20 @@ pub fn notify(item &(impl Summary + Display)) {
pub fn notify<T: Summary + Display>(item: &T) { pub fn notify<T: Summary + Display>(item: &T) {
``` ```
有了指定的这两个特质,那么 `notify` 的函数体,便可调用 `summarize` 函数,并可使用 `{}` 来格式化 `item` 了。 有了指定的这两个特质,那么 `notify` 的函数体,便可调用 `summarize` 函数,使用 `{}` 来格式化 `item` 了。
#### 用 `where` 子句特质边界更清楚 #### 使用 `where` 子句获得更清楚的特质边界
**Clearer Trait Bounds with `where` Clauses** **Clearer Trait Bounds with `where` Clauses**
过多特质边界的使用,有着其负面性。每个泛型都有自己的特质边界,因此带有多个泛型参数的函数,就会在函数名字与其参数列表之间,包含很多特质边界信息,从而令到该函数签名难于阅读。于这个原因Rust 就有了在函数签名之后的一个 `where` 子句里,指特质边界的这样一种替代语法。从而与其下面这样编写函数签名: 使用过多特质边界,有着其一些缺点。每个泛型都有自己的特质边界,那么有着多个泛型参数的函数,在其名字与其参数列表之间,就好包含很多特质边界信息,从而令到该函数签名难于阅读。于这个原因Rust 有着在函数签名之后的 `where` 子句里,指特质边界的这种替代语法。从而与其写出下面这签名:
```rust ```rust
fn some_function<T: Display + Clone, U: Clone + Debug>(t: &T, u: &U) -> i32 { fn some_function<T: Display + Clone, U: Clone + Debug>(t: &T, u: &U) -> i32 {
``` ```
就可以使用 `where` 子句,写成下面这样 咱们便可像下面这样,使用 `where` 子句:
```rust ```rust
fn some_function<T, U>(t: &T, u: &U) -> i32 fn some_function<T, U>(t: &T, u: &U) -> i32
@@ -744,7 +744,7 @@ fn some_function<T, U>(t: &T, u: &U) -> i32
``` ```
样的函数签名,就不那么杂乱无章了:函数名、参数列表与返回值类型紧挨在一起,与未带有很多特质边界的某个函数类似 函数签名,就不那么杂乱无章了:函数名、参数清单与返回值类型紧挨在一起,类似于与不带有很多特质边界的函数
### 实现了特质的返回值类型 ### 实现了特质的返回值类型