diff --git a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md index 359fd0c..0f7a399 100644 --- a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md +++ b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md @@ -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` 引用的生命周期。 下面是个其中适用第三条生命周期省略规则的示例: