主要观点:在 Rust 代码中经常使用 .unwrap()
,但难以记住其使用原因,可将其分为三种语义不同的情况并分别处理,提出新增 Result
和 Option
的方法来明确语义以避免混淆。
关键信息:
- 三种
.unwrap()
的情况:类似panic!()
(若无法执行则直接终止)、类似unreachable!()
(错误情况不可能发生)、类似todo!()
(尚未实现错误处理)。 - 示例:在 Web 服务器代码中用于表示无法处理的情况而直接终止;在静态变量声明中表示错误情况不可能发生;在快速编写的 Rust 代码中表示后续处理错误。
- 提议:新增
Option::todo
、Option::unreachable
、Result::todo
和Result::unreachable
函数,以明确语义,#[clippy::todo]
等可指出不应进入生产环境的临时unwrap
。 - 关于命名:RFC 提到可命名为
unwrap_todo
和unwrap_unreachable
,但作者认为todo()
本身不致混淆。
重要细节:在不同场景下.unwrap()
的具体应用及新增函数的作用和目的等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。