fix wrapping

This commit is contained in:
Matthew Kelly 2022-08-24 20:50:02 -04:00
parent dd7c48e529
commit fc02eee8f6

View file

@ -29,22 +29,21 @@ Rust book) to the `nested_borrow_mut` and `borrow_mut` functions. In both cases
the input is a reference to `self`, so the compiler attempts to assign the
the same lifetime to the input and output.
Looking specifically at `nested_borrow_mut`,
we see that there are three object references to keep track of,
along with their associated lifetimes:
Looking specifically at `nested_borrow_mut`, we see that there are three object
references to keep track of, along with their associated lifetimes:
- `self` (which is a `&mut T`)
- `u_ref` (which is a `&mut U`)
- `v_ref` (which is a `&mut V`)
The `borrow_mut()` method implicitly requires that that the input and output
have the same lifetime bounds. Thus:
have the same lifetime bounds. Thus the lines:
```rust
let u_ref = self.borrow_mut();
let v_ref = u_ref.borrow_mut();
```
Imply that `u_ref` and `self` must share a lifetime bound, and also that
imply that `u_ref` and `self` must share a lifetime bound, and also that
`v_ref` and `u_ref` share a lifetime bound. The problem is that the function
signature for `nested_borrow_mut` only gives the compiler information about the
lifetimes of `self` and `v_ref` -- nothing about `u_ref`.