diff --git a/book/contents/fight-with-compiler/lifetime/too-long2.md b/book/contents/fight-with-compiler/lifetime/too-long2.md index 4df7203d..2b97aa6f 100644 --- a/book/contents/fight-with-compiler/lifetime/too-long2.md +++ b/book/contents/fight-with-compiler/lifetime/too-long2.md @@ -120,7 +120,11 @@ impl<'a> Writer<'a> { ... } ``` -好像有点问题,`indent`返回的`Writer`的生命周期和外面的`Writer`的生命周期一模一样,这很不合理,一眼就能看出前者远小于后者,那我们尝试着修改下`indent`: +好像有点问题,`indent`返回的`Writer`的生命周期和外面调用者的`Writer`的生命周期一模一样,这很不合理,一眼就能看出前者远小于后者。 + +这里稍微展开以下,为何`indent`方法返回值的生命周期不能与参数中的`self`相同。**首先,我们假设它们可以相同,也就是上面的代码可以编译通过**,由于此时在返回值中借用了`self`的可变引用,意味着**如果你在返回值被使用后,还继续使用`self` 会导致重复借用的错误,因为返回值的生命周期将持续到 `self` 结束**。 + +既然不能相同,那我们尝试着修改下`indent`: ```rust fn indent<'b>(&'b mut self) -> Writer<'b> { Writer {