用途:当用户代码触发借用检查器错误(E0502、E0499、E0596 等),或询问能否同时持有 & 与 &mut、想用 .clone() 消错、询问 RefCell/Cell/内部可变性、需要从两个线程或闭包修改结构体不同字段、想从 Vec 不同部分取两个可变引用、或询问重借用时使用。
主要能力:先陈述借用规则——同一时间只能有一个可变引用或任意多个不可变引用,引用必须始终有效;再按概念给出速查:&T 共享可复制、&mut T 独占不可复制、NLL 借用止于最后一次使用、两阶段借用允许 vec.push(vec.len())、重借用 &mut *r、结构体字段级拆分借用、slice.split_at_mut 拆分、Cell/RefCell/Mutex 内部可变性。附错误码解码表(E0502、E0499、E0596、E0507、E0382)与常见反模式。
使用方式:作为技能被调用,按上述触发条件给出解释与修复建议;示例代码保持原样,如 v.push(v.len())、slice.split_at_mut(i)、r.borrow()/r.borrow_mut()、m.lock().unwrap()。
适用场景:Rust 借用与可变性设计、并发共享状态、观察者模式、缓存与回调注册表等编译期难以表达借用规则的场合。
限制:两阶段借用仅适用于方法调用实参位置;RefCell 违规会 panic,跨可能重入的调用持有借用需用 try_borrow;std::sync::Mutex 守卫不可跨 .await,异步中应使用 tokio::sync::Mutex;Cell 不暴露 &T/&mut T,非 Copy 类型需用 replace/take/swap。具体 API 签名与更多示例见其 references 文件,本资料未提供收费、平台与效果信息。