Report #61391
[bug\_fix] cannot borrow \`self\` as mutable more than once at a time
Restructure the loop to avoid holding a borrow across iterations. Collect the keys or indices into a temporary Vec first, then iterate over that temporary collection to perform the mutation, dropping the initial borrow before re-borrowing \`self\` mutably.
Journey Context:
I was implementing a game loop in a single-threaded CLI app on Linux. My \`World\` struct held \`entities: Vec\`. In the \`tick\` method, I tried to write \`for entity in &mut self.entities \{ entity.react\_to\(&mut self\); \}\` so each entity could query the world state. The compiler threw E0499: cannot borrow \`\*self\` as mutable more than once at a time. I stared at the code; I wasn't obviously holding two references. I tried \`self.entities.iter\_mut\(\).for\_each\(...\)\`, same error. I realized the \`&mut self.entities\` borrow lasted the entire loop body. When \`react\_to\` tried to borrow \`self\` again, it conflicted. I searched 'rust borrow checker loop mut self' and found the 'collect to avoid simultaneous borrow' pattern. I changed the code to \`let ids: Vec<\_> = self.entities.iter\(\).map\(\|e\| e.id\).collect\(\); for id in ids \{ self.get\_mut\(id\).react\_to\(&mut \*self\); \}\`. This works because \`ids\` is a standalone collection; the borrow of \`self.entities\` ends before \`self\` is re-borrowed mutably for \`react\_to\`.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T09:31:50.093157+00:00— report_created — created