Install
openclaw skills install @thcjp/rust-freeopenclaw skills install @thcjp/rust-free编写地道Rust代码,规避所有权、借用、生命周期、字符串、错误处理、迭代器、并发与内存的高频陷阱,以及常见编译错误与Cargo陷阱.
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | Rust避坑指南(免费版)处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
clone() 或用 & 借用for item in vec 移动vec:改用 &vec 或 .iter() 借用String 移入函数:只读访问传 &str&mut 和 &:重构结构或用内部可变性&mut self 的可变借用阻塞所有访问:拆分结构体或用 RefCell'static 表示"可以"永久存活,非"已经":String 是 'static capable<'a>:struct Foo<'a> { bar: &'a str }fn get<'a>(s: &'a str) -> &'a strs[0] 不编译:用 .chars().nth(0) 或 .bytes().len() 返回字节数非字符数:用 .chars().count() 获取字符数s1 + &s2 移动s1:用 format!("{}{}", s1, s2) 保留两者完成响应以Markdown格式返回,包含任务状态(成功/失败)、解析摘要和具体输出数据。失败时返回错误码和错误信息,便于定位问题。- 验证返回数据的完整性和格式正确性
输出格式的配置文档进行参数调优详细的输入输出格式请参考下方章节说明。
| 场景 | 输入 | 输出 |
|---|---|---|
| 所有权错误诊断 | 编译错误信息 | 移动/借用修复方案 |
| 生命周期标注 | 含引用的结构体/函数 | <'a> 标注与绑定规则 |
| 错误处理改造 | unwrap() 生产代码 | ? + Result 返回类型 |
不适用于:Rust生态框架选型、嵌入式Rust特殊约束、FFI深度绑定、过程宏开发.
? 而非 unwrap()Send/Sync trait bound结果验证: 任务完成后,查看输出确认状态。成功时返回摘要和数据;失败时根据错误信息排查,参考恢复章节获取修复步骤.
// 问题:变量移动后使用
let s1 = String::from("hello");
let s2 = s1; // s1 移动到 s2
println!("{}", s1); // 编译错误: value moved here
// ...
// 修复1:clone
let s1 = String::from("hello");
let s2 = s1.clone();
println!("{}", s1); // OK
// ...
// 修复2:借用
let s1 = String::from("hello");
let s2 = &s1; // 借用
println!("{} {}", s1, s2); // OK
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
value moved here 编译错误 | 变量移动后仍使用 | 显式 clone() 或改用 & 借用 |
cannot borrow as mutable 编译错误 | 已有不可变借用时取可变借用 | 重构借用顺序,或用 RefCell 内部可变性 |
missing lifetime specifier 编译错误 | 编译器无法推断引用生命周期 | 为结构体与函数添加 <'a> 标注并绑定输入输出 |
the trait bound Send is not satisfied | Rc/RefCell 跨线程使用 | 改用 Arc/Mutex 满足 Send/Sync |
String 与 &str 如何选择?A: 函数参数优先 &str(只读、可接受 String 与 &str);结构体字段与返回值用 String(拥有所有权);需要零拷贝高性能场景用 Cow<'a, str>。String 移入函数会转移所有权,只读访问传 &str 更高效.
? 操作符的返回类型要求?A: ? 用于 Result/Option,要求函数返回类型也是 Result/Option。main 函数用 ? 需声明 fn main() -> Result<(), Box<dyn std::error::Error>>。? 会自动转换错误类型(若实现了 From).
.iter() 与 .into_iter() 有何区别?A: .iter() 借用集合元素( &T),原集合保留;.into_iter() 移动元素( T),原集合被消费。只读遍历用 .iter(),需要所有权转移用 .into_iter()。.iter_mut() 提供可变借用 &mut T.
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
本Skill无需额外API Key(LLM能力由Agent平台内置提供)
本免费版提供基础功能。升级到完整版 rust 获取全部能力和高级特性.