CRITICAL: Use for mutability issues. Triggers: E0596, E0499, E0502, cannot borrow as mutable, already borrowed as immutable, mut, &mut, interior mutability, Cell, RefCell, Mutex, RwLock, 可变性, 内部可变性, 借用冲突
Installation
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
CRITICAL: Use for mutability issues. Triggers: E0596, E0499, E0502, cannot borrow as mutable, already borrowed as immutable, mut, &mut, interior mutability, Cell, RefCell, Mutex, RwLock, 可变性, 内部可变性, 借用冲突
user-invocable
false
Mutability
Layer 1: Language Mechanics
Core Question
Why does this data need to change, and who can change it?
Before adding interior mutability, understand:
Is mutation essential or accidental complexity?
Who should control mutation?
Is the mutation pattern safe?
Error → Design Question
Error
Don't Just Say
Ask Instead
E0596
"Add mut"
Should this really be mutable?
E0499
"Split borrows"
Is the data structure right?
E0502
"Separate scopes"
Why do we need both borrows?
RefCell panic
"Use try_borrow"
Is runtime check appropriate?
Thinking Prompt
Before adding mutability:
Is mutation necessary?
Maybe transform → return new value
Maybe builder → construct immutably
Who controls mutation?
External caller → &mut T
Internal logic → interior mutability
Concurrent access → synchronized mutability
What's the thread context?
Single-thread → Cell/RefCell
Multi-thread → Mutex/RwLock/Atomic
Trace Up ↑
When mutability conflicts persist:
E0499/E0502 (borrow conflicts)
↑ Ask: Is the data structure designed correctly?
↑ Check: m09-domain (should data be split?)
↑ Check: m07-concurrency (is async involved?)