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