用途:当编译器报出 E0382、E0502、E0596、E0499、E0500、E0716(或 NLL 后无编号但信息相同的变体)时,帮助定位根因并给出修复方案。也适用于用户询问“变量传入/赋值/match 后为何不能再用”“Rust 为何禁止 & 与 &mut 共存”,或习惯性用 .clone() 兜底时。若报错含 lifetime 或 'a、'static 符号,应改用 lifetimes 相关技能。
主要能力:先按报错信息映射到错误码,再按优先级给出修复族。E0382(移动后使用):优先改为借用 &T/&mut T,其次重构所有权、用 std::mem::take 或 mem::replace,最后才考虑 .clone()。E0502(可变与不可变借用冲突):收紧共享借用作用域(NLL),把读取提取为局部变量。E0596(未声明 mut):加 mut、把 &self 改为 &mut self,必要时用 Cell/RefCell 内部可变性。E0499(多次可变借用):作用域收紧、按结构体字段或 split_at_mut 拆分借用。E0500(闭包需唯一访问):先结束冲突借用、用 move 捕获或缩小捕获集。E0716(临时值被借用时释放):用 let 绑定延长临时值生命周期。
使用方式:技能以文档形式提供决策树、错误示例与修复模式,并附 references/methods.md、references/examples.md、references/anti-patterns.md 参考文件。
限制:资料未提供安装命令、平台支持或收费信息。反模式部分明确反对用 RefCell 绕过 E0502/E0499、单线程下用 Arc<Mutex<T>> 修 E0596、用 Box::leak 修 E0716、用 unsafe 绕过借用检查等做法。