Update ch19-02-advanced-lifetimes.md

This commit is contained in:
Zheng Ping 2017-07-28 11:26:02 +08:00 committed by GitHub
parent 784f8980c4
commit 537b3d41fd

View File

@ -182,31 +182,19 @@ struct Parser<'c, 's: 'c> {
} }
``` ```
Now, the reference to `Context` in the `Parser` and the reference to the string 现在, 对`Parser`中的`Context`的引用和对`Context`中的字符串切片的引用就有了不同的生命周期, 并且我们还保证对字符串切片的引用的生命周期比对`Context`的引用的生命周期更长.
slice in the `Context` have different lifetimes, and we've ensured that the
lifetime of the string slice is longer than the reference to the `Context`.
That was a very long-winded example, but as we mentioned at the start of this 哦, 这个例子真的很长, 但正如本章开头所说, 这些功能非常适用. 你不会经常使用这个语法, 但是在你需要引用另一个引用中的某些内容的时候你就用得上它了.
chapter, these features are pretty niche. You won't often need this syntax, but
it can come up in situations like this one, where you need to refer to
something you have a reference to.
### Lifetime Bounds ### 生命周期绑定
In Chapter 10, we discussed how to use trait bounds on generic types. We can 我们在第10章里面讨论过如何在泛型上使用 trait 绑定. 我们也可以在泛型上添加生命周期参数来作为约束. 比如, 我们想在引用上做一个封装. 还记得第15章中的 `RefCell<T>` 吗? 它就是 `borrow``borrow_mut` 方法的工作原理; 为了在运行时追踪借用规则它们返回引用的封装. 例 19-16 中给出了一个没有生命周期参数的结构的定义:
also add lifetime parameters as constraints on generic types. For example,
let's say we wanted to make a wrapper over references. Remember `RefCell<T>`
from Chapter 15? This is how the `borrow` and `borrow_mut` methods work; they
return wrappers over references in order to keep track of the borrowing rules
at runtime. The struct definition, without lifetime parameters for now, would
look like Listing 19-16:
```rust,ignore ```rust,ignore
struct Ref<T>(&T); struct Ref<T>(&T);
``` ```
<span class="caption">Listing 19-16: Defining a struct to wrap a reference to a <span class="caption">例 19-16: 先不使用生命周期参数定义一个结构来封装一个对泛型的引用</span>
generic type; without lifetime parameters to start</span>
However, using no lifetime bounds at all gives an error because Rust doesn't However, using no lifetime bounds at all gives an error because Rust doesn't
know how long the generic type `T` will live: know how long the generic type `T` will live: