diff --git a/src/ch19-02-advanced-lifetimes.md b/src/ch19-02-advanced-lifetimes.md index b79dc6b..a660461 100644 --- a/src/ch19-02-advanced-lifetimes.md +++ b/src/ch19-02-advanced-lifetimes.md @@ -5,7 +5,7 @@ bounds)*, 和 *trait 对象生命周期*. ### 生命周期子类型 -想象一下我们想写一个解释器. 为此, 我们将有一个持有我们将解析的字符串的引用的结构, 我们把这个结构叫做`Context`. 我们将写一个能够解析这个字符串并返回成功或失败的解析器. 该解析器需要借用这个上下文(解析器中的`context`属性)来完成解析. 实现这个功能的代码如例 19-12, 但是这个代码不能被编译因为我们没有使用生命周期注解: +想象一下我们想写一个解释器. 为此, 我们需要一个持有即将被解析的字符串的引用的结构, 我们把这个结构叫做`Context`. 我们将写一个能够解析这个字符串并返回成功或失败的解析器. 该解析器需要借用这个上下文(解析器中的`context`属性)来完成解析. 实现这个功能的代码如例 19-12, 但是这个代码不能被编译因为我们没有使用生命周期注解: ```rust,ignore struct Context(&str); @@ -21,17 +21,9 @@ impl Parser { } ``` -Listing 19-12: Defining a `Context` struct that holds a -string slice, a `Parser` struct that holds a reference to a `Context` instance, -and a `parse` method that always returns an error referencing the string -slice +例19-12: 定义持有一个字符串切片的`Context`结构, 一个持有某个`Context`实例引用的`Parser`结构, 和一个总是返回一个错误的`parse`方法, 这个被返回的错误引用了该字符串切片 -For simplicity's sake, our `parse` function returns a `Result<(), &str>`. That -is, we don't do anything on success, and on failure we return the part of the -string slice that didn't parse correctly. A real implementation would have more -error information than that, and would actually return something created when -parsing succeeds, but we're leaving those parts of the implementation off since -they aren't relevant to the lifetimes part of this example. We're also defining +为了简单起见, 我们的`parse`函数返回一个`Result<(), &str>`. 也就是说, 我们在成功时不做任何事情, 在失败时我们返回部分没有解析正确的字符串切片. 一个真正的实现将会有更多的错误信息, 而且实际上在解析成功时会返回当时创建的内容, 但是我们将实现的这部分省略了因为它们与本例的生命周期无关. We're also defining `parse` to always produce an error after the first byte. Note that this may panic if the first byte is not on a valid character boundary; again, we're simplifying the example in order to concentrate on the lifetimes involved.