Update Ch10

This commit is contained in:
Unisko PENG 2023-04-21 13:43:20 +08:00
parent bfc909f57a
commit cc6e0e6d4c

View File

@ -1331,13 +1331,15 @@ fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
### 方法定义中的生命周期注解
前面在有着生命周期的结构体上实现方法时,就使用了与清单 10-11 中泛型参数同样的语法。其中根据生命周期是否与结构体字段,或与方法的参数及返回值相关,而声明并使用到生命周期参数。
**Lifetime Annotations in Method Definitions**
由于这些生命周期为结构体类型的部分,因此结构体字段的生命周期名字,总是要声明在 `impl` 关键字之后,并随后要在结构体名字之后使用
当咱们在结构体上实现带有生命周期的方法时,咱们会使用与清单 10-11 中所展示的泛型参数同样语法。其中咱们会根据其是否与结构体字段,或方法参数及返回值相关,而声明出并用到生命周期参数
`impl` 代码块里头的方法签名中,这些引用可能会被捆绑到结构体字段中引用的生命周期,或这些引用也可能是独立的。此外,生命周期省略规则通常会发挥作用,从而在方法签名中,生命周期注解就不是必要的了。下面就来看看一些使用了清单 10-24 中曾定义的名为 `ImportantExcerpt` 结构体的示例
由于结构体字段的生命周期是结构体类型的一部分,因此他们总是需要声明在 `impl` 关键字之后,且随后会在结构体名字之后用到
首先,这里将使用一个名为 `level`、其唯一参数是个到 `self` 引用,且返回值是个 `i32` 、不是到任何变量引用的方法:
`impl` 代码块里的方法签名中,一些引用可能与结构体字段中的引用生命周期相关,也可能他们是独立的。此外,生命周期省略规则通常会发挥作用,从而在方法签名中,生命周期注解就不是必要的。咱们来看看一些使用咱们曾于清单 10-24 中定义的名为 `ImportantExcerpt` 结构体的示例。
首先,咱们将使用一个名为 `level` 的方法,其唯一参数是个到 `self` 引用,且返回值为非到任何东西引用的 `i32`
```rust
impl<'a> ImportantExcerpt<'a> {
@ -1348,7 +1350,7 @@ impl<'a> ImportantExcerpt<'a> {
```
`impl` 之后的生命周期参数声明,及在类型名字之后其的使用,都是必须的,但由于那首条省略规则,这里就未要求对到 `self` 引用的生命周期进行注解
`impl` 后的生命周期参数声明,与类型名字后其使用,都是必须的,但由于第一条省略规则的原因,咱们未被要求注解到 `self` 引用的生命周期
下面是个其中适用第三条生命周期省略规则的示例: