返回顶部
R

RustRust编程技巧

Write idiomatic Rust avoiding ownership pitfalls, lifetime confusion, and common borrow checker battles.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.1
安全检测
已通过
1,872
下载量
免费
免费
4
收藏
概述
安装方式
版本历史

Rust

快速参考

主题文件关键陷阱
所有权与借用ownership-borrowing.md移动语义让所有人中招
字符串与类型
types-strings.md | String vs &str,UTF-8 索引 | | 错误与迭代 | errors-iteration.md | 生产环境中的 unwrap(),惰性迭代器 | | 并发与内存 | concurrency-memory.md | Rc 不是 Send,RefCell 恐慌 | | 高级陷阱 | advanced-traps.md | unsafe、宏、FFI、性能 |

关键陷阱(高频失败点)

所有权 — 编译器错误的第一大来源

  • - 使用后变量被移动 — 显式克隆或使用 & 借用
  • for item in vec 会移动 vec — 使用 &vec 或 .iter() 进行借用
  • String 被移入函数 — 只读访问时传递 &str

借用 — 借用检查器永远是对的

  • - 不能同时拥有 &mut 和 & — 重构代码或使用内部可变性
  • 返回局部变量的引用会失败 — 改为返回拥有的值
  • 通过 &mut self 的可变借用会阻塞所有访问 — 拆分结构体或使用 RefCell

生命周期 — 当编译器无法推断时

字符串 — UTF-8 的意外之处

  • - s[0] 无法编译 — 使用 .chars().nth(0) 或 .bytes()
  • .len() 返回字节数,而非字符数 — 使用 .chars().count()
  • s1 + &s2 会移动 s1 — 使用 format!({}{}, s1, s2) 保留两者

错误处理 — 生产代码

  • - unwrap() 会导致恐慌 — 生产环境中使用 ? 或 match
  • ? 需要 Result/Option 返回类型 — main 函数需要 -> Result<()>
  • expect(上下文) 优于 unwrap() — 能显示恐慌原因

迭代器 — 惰性求值

  • - .iter() 借用,.intoiter() 移动 — 谨慎选择
  • .collect() 需要类型 — collect::>>() 或类型绑定
  • 迭代器是惰性的 — 在被消费前不会执行任何操作

并发 — 线程安全

  • - Rc 不是 Send — 多线程使用 Arc
  • Mutex 锁定返回守卫 — 释放时自动解锁,不要在 await 期间持有
  • RwLock 死锁 — 读取者升级为写入者会永久阻塞

内存 — 智能指针

  • - RefCell 在运行时恐慌 — 违反借用规则时
  • 递归类型使用 Box — 编译器需要已知大小
  • 避免 Rc> 的混乱结构 — 重新思考所有权

常见编译器错误(新增)

错误原因修复
value moved here移动后使用克隆或借用
cannot borrow as mutable
已被借用 | 重构或使用 RefCell | | missing lifetime specifier | 引用不明确 | 添加
| | the trait bound X is not satisfied | 缺少实现 | 检查 trait 约束 | | type annotations needed | 无法推断 | 使用涡轮鱼或显式类型 | | cannot move out of borrowed content | 解引用移动 | 克隆或模式匹配 |

Cargo 陷阱(新增)

  • - cargo update 更新 Cargo.lock,而非 Cargo.toml — 需要手动升级版本
  • 特性是累加的 — 无法禁用依赖项启用的特性
  • [dev-dependencies] 不在发布二进制文件中 — 但存在于测试/示例中
  • cargo build --release 快得多 — 调试构建有意变慢

标签

skill ai
v1.0.1 最新 2026-4-17 14:42
Initial release

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部