外观
编译错误篇:读懂编译器的教诲
小螃蟹说
新手怕报错,老手爱报错。差别不在天赋,在会不会读。
Rust 的编译器(borrow checker 等)是全世界最严格的老师:它在编译时拦住你,还告诉你错在哪一行、为什么错、怎么改。这一篇,我们把最常见的编译错误一个个拆开:真实报错、背后原理、解药、预防。
每节一个雷区,雷区名就是报错编号——遇到报错,先翻目录找编号。
报错编号怎么看
text
error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immutable
--> src/main.rs:5:14
|
4 | let r = &s;
| -- immutable borrow occurs here
5 | s.push_str("!");
| ^ mutable borrow occurs here
6 | println!("{}", r);
| - immutable borrow later used here关键信息四件套:
E0502:错误编号——雷区名,到目录里找它--> src/main.rs:5:14:错在哪个文件哪一行哪一列immutable borrow occurs here等:每一步借用/移动发生的位置清单(从上往下读,就是事故时间线)help:或note::编译器给的修复建议(不一定对,但值得看)
小贴士
报错信息可能很长,新手容易懵。从 error[E编号] 和第一个 --> 开始读,先知道"什么错、在哪",再看细节。本书的每一节,就是把"细节"翻译成人话。
这一篇的雷区清单
| 雷区 | 编号 | 一句话 |
|---|---|---|
| 1 | E0382 | 值被移动了,你还用它 |
| 2 | E0502 | 借来读的时候,又想借去改 |
| 3 | E0597 | 借出去的东西活得太久 |
| 4 | E0106 | 函数忘了说借条的保质期 |
| 5 | E0277 | 类型没实现某个 trait |
| 6 | E0308 | 类型对不上 |
| 7 | E0505 | 从借用里把值搬走 |
| 8 | E0716 | 借了一个"一次性的临时值" |
| 9 | E0599 | 方法找不到(忘了 use trait!) |