TTokenySpace
返回 Skills 列表

Rust避坑指南(免费版)

提供Rust所有权、借用、生命周期、字符串、错误处理及并发常见陷阱的诊断与修复建议,提升代码质量。

#中文
0

安装到 Tokeny(自动)

下载 ZIP
安装"rust-free"技能
技能信息:
- 名称: Rust避坑指南(免费版)
- 标识: rust-free
- 描述: 提供Rust所有权、借用、生命周期、字符串、错误处理及并发常见陷阱的诊断与修复建议,提升代码质量。
- 版本: 1.0.0
下载地址:
https://www.tokeny.space/api/skills/rust-free/download
继续

复制上方内容到 Tokeny 客户端并在会话中发送即可自动安装;也可直接 下载 ZIP并拖动到技能窗口安装。

SKILL.md

Rust避坑指南(免费版)

编写地道Rust代码,规避所有权、借用、生命周期、字符串、错误处理、迭代器、并发与内存的高频陷阱,以及常见编译错误与Cargo陷阱.

输入格式

参数名类型必填说明
inputstringRust避坑指南(免费版)处理的输入数据或指令
optionsobject附加配置选项,如模式选择、格式偏好等
callback_urlstring异步处理完成后的回调通知URL

核心能力

1. 所有权与借用

  • 变量移动后使用:显式 clone() 或用 & 借用
  • for item in vec 移动vec:改用 &vec.iter() 借用
  • String 移入函数:只读访问传 &str
  • 所有权是Rust编译错误的领先大来源

2. 借用检查器

  • 不能同时持有 &mut&:重构结构或用内部可变性
  • 返回局部引用失败:返回所有权值而非引用
  • &mut self 的可变借用阻塞所有访问:拆分结构体或用 RefCell

3. 生命周期

  • 'static 表示"可以"永久存活,非"已经":String 是 'static capable
  • 含引用的结构体需要 <'a>:struct Foo<'a> { bar: &'a str }
  • 返回引用的函数必须绑定输入:fn get<'a>(s: &'a str) -> &'a str

4. 字符串UTF-8陷阱

  • s[0] 不编译:用 .chars().nth(0).bytes()
  • .len() 返回字节数非字符数:用 .chars().count() 获取字符数
  • s1 + &s2 移动s1:用 format!("{}{}", s1, s2) 保留两者

输出格式

完成响应以Markdown格式返回,包含任务状态(成功/失败)、解析摘要和具体输出数据。失败时返回错误码和错误信息,便于定位问题。- 验证返回数据的完整性和格式正确性

  • 参考输出格式的配置文档进行参数调优

快速开始

  1. 确认运行环境满足依赖说明中的要求
  2. 在AI Agent对话中调用本技能,提供必要的输入参数
  3. 检查输出结果,根据需要进行后续处理

详细的输入输出格式请参考下方章节说明。

适用场景

场景输入输出
所有权错误诊断编译错误信息移动/借用修复方案
生命周期标注含引用的结构体/函数<'a> 标注与绑定规则
错误处理改造unwrap() 生产代码? + Result 返回类型

不适用于:Rust生态框架选型、嵌入式Rust特殊约束、FFI深度绑定、过程宏开发.

使用流程

  1. 识别错误类别:所有权、借用、生命周期、字符串、错误处理、迭代器、并发、内存
  2. 按编译错误表匹配修复方案
  3. 优先借用而非clone,优先 ? 而非 unwrap()
  4. 并发场景验证 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 satisfiedRc/RefCell 跨线程使用改用 Arc/Mutex 满足 Send/Sync

常见问题

Q1: String&str 如何选择?

A: 函数参数优先 &str(只读、可接受 String&str);结构体字段与返回值用 String(拥有所有权);需要零拷贝高性能场景用 Cow<'a, str>String 移入函数会转移所有权,只读访问传 &str 更高效.

Q2: ? 操作符的返回类型要求?

A: ? 用于 Result/Option,要求函数返回类型也是 Result/Optionmain 函数用 ? 需声明 fn main() -> Result<(), Box<dyn std::error::Error>>? 会自动转换错误类型(若实现了 From).

Q3: .iter().into_iter() 有何区别?

A: .iter() 借用集合元素( &T),原集合保留;.into_iter() 移动元素( T),原集合被消费。只读遍历用 .iter(),需要所有权转移用 .into_iter().iter_mut() 提供可变借用 &mut T.

已知限制

  • 需要LLM支持生成代码修复方案
  • 编译错误修复依赖完整错误信息,模糊描述可能误判
  • 并发安全审查需理解完整调用图,局部代码可能遗漏

依赖说明

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux

依赖项

依赖项类型是否必需获取方式
LLM APIAPI必需由Agent内置LLM提供

API Key 配置

本Skill无需额外API Key(LLM能力由Agent平台内置提供)

可用性分类

  • 分类: MD+EXEC()

升级提示

本免费版提供基础功能。升级到完整版 rust 获取全部能力和高级特性.

评论

加载中…