mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2026-08-19 12:43:28 +08:00
Updated src/generic_types_traits_and_lifetimes/lifetimes.md'.
This commit is contained in:
@@ -102,7 +102,7 @@ fn main() {
|
||||
现在咱们知道引用的生命周期在何处以及 Rust 怎样分析生命周期以确保引用将始终有效,下面我们来探讨函数参数与返回值中的泛型生命周期。
|
||||
|
||||
|
||||
### 函数中的泛型生命周期
|
||||
## 函数中的泛型生命周期
|
||||
|
||||
我们将编写一个函数,返回两个字符串切片中较长的那个。这个函数将取两个字符串切片,并返回单个字符串切片。在我们实现 `longest` 函数后,下面清单 10-19 中的代码应打印 `最长的字符串为 abcd`。
|
||||
|
||||
@@ -335,7 +335,7 @@ error: could not compile `generic_lifetimes_demo` (bin "generic_lifetimes_demo")
|
||||
最终,生命周期语法是关于连接函数的不同参数与返回值的生命周期。一旦他们联系起来,Rust 就有足够信息来实现内存安全的操作,并禁止会创建悬空指针或以其他方式违反内存安全的操作。
|
||||
|
||||
|
||||
### 结构体定义方面
|
||||
## 结构体定义方面
|
||||
|
||||
到目前为止,我们已定义的结构体都存储的是自有类型。我们可以定义结构体为存储引用,但在这种情况下,我们就需要在结构体定义中的每个引用上添加生命周期注解。下面清单 10-24 有个名为 `ImportedExcerpt` 的结构体,存储了一个字符串切片。
|
||||
|
||||
@@ -363,10 +363,7 @@ fn main() {
|
||||
这里的 `main` 函数会创建出 `ImportantExcerpt` 结构体的,保存着到由变量 `novel` 拥有的 `String` 的第一个句子引用的一个示例。`novel` 中的数据在这个 `ImportantExcerpt` 实例被创建之前就存在了。此外,在这个 `ImportantExcerpt` 超出作用域之前,`novel` 不会超出作用域,因此这个 `ImportantExcerpt` 实例中的引用是有效的。
|
||||
|
||||
|
||||
### 生命周期的省略
|
||||
|
||||
**Lifetime Elision**
|
||||
|
||||
## 生命周期的省略
|
||||
|
||||
咱们已经了解到每个引用都有生命周期,以及需要给使用了引用的函数与结构体,指明生命周期参数。不过,在第 4 章中的清单 4-9 中,咱们曾有一个不带生命周期注解也被编译了的函数,在下面清单 10-25 中再次予以展示。
|
||||
|
||||
@@ -451,10 +448,7 @@ fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
|
||||
由于第三条规则实际上只适用于方法签名,咱们接下来就要看看在方法上下文中的生命周期,以发现为何第三条规则,就意味着咱们不必经常注解方法签名中的生命周期。
|
||||
|
||||
|
||||
### 方法定义中的生命周期注解
|
||||
|
||||
**Lifetime Annotations in Method Definitions**
|
||||
|
||||
## 方法定义方面
|
||||
|
||||
当咱们在结构体上实现带有生命周期的方法时,咱们会使用与清单 10-11 中所展示的泛型参数同样语法。其中咱们会根据其是否与结构体字段,或方法参数及返回值相关,而声明出并用到生命周期参数。
|
||||
|
||||
@@ -489,10 +483,7 @@ impl<'a> ImportantExcerpt<'a> {
|
||||
这里有两个输入生命周期,那么 Rust 就会适用首条生命周期省略规则,而赋予 `&self` 与 `announcement` 其各自的生命周期。随后,由于其中一个参数是 `&self`,那么返回值类型就会得到 `&self` 的生命周期,进而全部生命周期都得到了计算。
|
||||
|
||||
|
||||
### 静态生命周期
|
||||
|
||||
**The Static Lifetime**
|
||||
|
||||
## 静态生命周期
|
||||
|
||||
咱们需要讨论的一种特殊生命周期是 `'static`,其表示受其影响的引用,*可以* 在程序整个持续时间内存活。所有字符串字面值,都有着 `'static` 的生命周期,咱们可将其注解为下面这样:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user