mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-03-14 11:20:29 +08:00
Update Ch10
This commit is contained in:
parent
bfc909f57a
commit
cc6e0e6d4c
@ -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` 引用的生命周期。
|
||||
|
||||
下面是个其中适用第三条生命周期省略规则的示例:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user