Rust 错误处理缺失的那一环
来源:mcmah309.github.io — 2026-10-06
📋 概述
作者认为 Rust 错误处理的摩擦来自“往 Result 的错误半边放什么类型”:精确类型需要样板代码,便利类型又掩盖了可能发生的错误。以读取端口为例,thiserror 省去了手写的 Display、Error 与 From 实现,但每个错误枚举之间如何相互关联仍要人工决定——嵌套制造层级,扁平化制造转换,而单一 crate 级大错误类型又让函数宣称自己其实不会返回的错误。
🔑 核心要点
- 摩擦点在于决定 Result 错误半边放什么类型
- thiserror 省去了手写的 Display、Error 与 From 实现,但仍需自行决定枚举间的关系
- 三种权衡:嵌套枚举、扁平化转换、单一 crate 级大错误类型
- 单一错误类型会让函数宣称自己其实不会返回的错误
- 作者主张精确与便利不必互相竞争,错误类型应像函数一样易于组合
💡 金句
精确与便利不必是相互竞争的目标。错误类型应当像返回它们的函数一样,易于组合。
👍 0
👎 0
← 返回 Lobsters 首页