Update: unified format

pull/413/head
Allan Downey 3 years ago
parent e78695f2fa
commit d2684fac03

@ -29,16 +29,16 @@ Rust 生命周期之所以难,是因为这个概念对于我们来说是全新
此处 `r` 就是一个悬垂指针,它引用了提前被释放的变量 `x`,可以预料到,这段代码会报错: 此处 `r` 就是一个悬垂指针,它引用了提前被释放的变量 `x`,可以预料到,这段代码会报错:
```console ```console
error[E0597]: `x` does not live long enough // x活得不够久 error[E0597]: `x` does not live long enough // `x` 活得不够久
--> src/main.rs:7:17 --> src/main.rs:7:17
| |
7 | r = &x; 7 | r = &x;
| ^^ borrowed value does not live long enough // 被借用的x活得不够久 | ^^ borrowed value does not live long enough // 被借用的 `x` 活得不够久
8 | } 8 | }
| - `x` dropped here while still borrowed // x在这里被丢弃但是它依然还在被借用 | - `x` dropped here while still borrowed // `x` 在这里被丢弃,但是它依然还在被借用
9 | 9 |
10 | println!("r: {}", r); 10 | println!("r: {}", r);
| - borrow later used here // 对x的借用在此处被使用 | - borrow later used here // 对 `x` 的借用在此处被使用
``` ```
在这里 `r` 拥有更大的作用域,或者说**活得更久**。如果 Rust 不阻止该垂悬引用的发生,那么当 `x` 被释放后,`r` 所引用的值就不再是合法的,会导致我们程序发生异常行为,且该异常行为有时候会很难被发现。 在这里 `r` 拥有更大的作用域,或者说**活得更久**。如果 Rust 不阻止该垂悬引用的发生,那么当 `x` 被释放后,`r` 所引用的值就不再是合法的,会导致我们程序发生异常行为,且该异常行为有时候会很难被发现。
@ -55,7 +55,7 @@ error[E0597]: `x` does not live long enough // x活得不够久
} // -+ | } // -+ |
// | // |
println!("r: {}", r); // | println!("r: {}", r); // |
} } // ---------+
``` ```
这段代码和之前的一模一样,唯一的区别在于增加了对变量生命周期的注释。这里,`r` 变量被赋予了生命周期 `'a``x` 被赋予了生命周期 `'b`,从图示上可以明显看出生命周期 `'b``'a` 小很多。 这段代码和之前的一模一样,唯一的区别在于增加了对变量生命周期的注释。这里,`r` 变量被赋予了生命周期 `'a``x` 被赋予了生命周期 `'b`,从图示上可以明显看出生命周期 `'b``'a` 小很多。
@ -126,7 +126,7 @@ help: consider introducing a named lifetime parameter // 考虑引入一个生
因此,这时就回到了文章开头说的内容:在存在多个引用时,编译器有时会无法自动推导生命周期,此时就需要我们手动去标注,通过为参数标注合适的生命周期来帮助编译器进行借用检查的分析。 因此,这时就回到了文章开头说的内容:在存在多个引用时,编译器有时会无法自动推导生命周期,此时就需要我们手动去标注,通过为参数标注合适的生命周期来帮助编译器进行借用检查的分析。
## 生命周期标注语法 ## 生命周期标注语法
> 生命周期标注并不会改变任何引用的实际作用域 - 鲁迅 > 生命周期标注并不会改变任何引用的实际作用域 -- 鲁迅
鲁迅说过的话,总是值得重点标注,当你未来更加理解生命周期时,你才会发现这句话的精髓和重要!现在先简单记住,**标记的生命周期只是为了取悦编译器,让编译器不要难为我们**,记住了吗?没记住,再回头看一遍,这对未来你遇到生命周期问题时会有很大的帮助! 鲁迅说过的话,总是值得重点标注,当你未来更加理解生命周期时,你才会发现这句话的精髓和重要!现在先简单记住,**标记的生命周期只是为了取悦编译器,让编译器不要难为我们**,记住了吗?没记住,再回头看一遍,这对未来你遇到生命周期问题时会有很大的帮助!
@ -588,6 +588,6 @@ where
## 总结 ## 总结
我不知道支撑我一口气写完的勇气是什么,也许是不做完不爽夫斯基,也许是一些读者对本书的期待,不管如何,这章足足写了 17000 字,可惜不是写小说,不然肯定可以获取很多月票 :) 我不知道支撑我一口气写完的勇气是什么,也许是不做完不爽夫斯基,也许是一些读者对本书的期待,不管如何,这章足足写了 17000 字,可惜不是写小说,不然肯定可以获取很多月票 :)
从本章开始,最大的收获就是可以在结构体中使用引用类型了,说实话,为了引入这个特性,我已经憋了足足30章节。。 从本章开始,最大的收获就是可以在结构体中使用引用类型了,说实话,为了引入这个特性,我已经憋了足足 30 章节……
但是,还没完,是的,就算是将近2万字,生命周期的旅程依然没有完结,下一节将介绍一些关于生命周期的高级特性,这些特性你在其它中文书中目前还看不到的。 但是,还没完,是的,就算是将近万字,生命周期的旅程依然没有完结,下一节将介绍一些关于生命周期的高级特性,这些特性你在其它中文书中目前还看不到的。

Loading…
Cancel
Save