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, 可变性, 内部可变性, 借用冲突
Instalação
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
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?)