1
Fork 0

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 input is a reference to `self`, so the compiler attempts to assign the
the same lifetime to the input and output. the same lifetime to the input and output.
Looking specifically at `nested_borrow_mut`, Looking specifically at `nested_borrow_mut`, we see that there are three object
we see that there are three object references to keep track of, references to keep track of, along with their associated lifetimes:
along with their associated lifetimes:
- `self` (which is a `&mut T`) - `self` (which is a `&mut T`)
- `u_ref` (which is a `&mut U`) - `u_ref` (which is a `&mut U`)
- `v_ref` (which is a `&mut V`) - `v_ref` (which is a `&mut V`)
The `borrow_mut()` method implicitly requires that that the input and output 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 ```rust
let u_ref = self.borrow_mut(); let u_ref = self.borrow_mut();
let v_ref = u_ref.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 `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 signature for `nested_borrow_mut` only gives the compiler information about the
lifetimes of `self` and `v_ref` -- nothing about `u_ref`. lifetimes of `self` and `v_ref` -- nothing about `u_ref`.