- UID
- 1
- 精华
- 积分
- 76462
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
Rust 定义自己的错误类型是为了方便使用 Result<T, E> 或者 Result<T, Box<dyn std::error::Error>>,以下例子可以作为参考。
如图所示,我定义了我的错误类型 WaveFormError,它是个枚举,每一项枚举代表一种具体错误。别人使用我的库的时候,我的库只会返回这个错误类型,因此方便设计程序的遇到错误的条件处理流程。
为了能把这个错误装入 Box<dyn std::error::Error>,我们需要这一句:- impl std::error::Error for 我的错误类型 {}
复制代码
为了在报错的时候,能够以文本的形式报错,我需要实现它的 fmt() 函数,因此要写以下代码:- impl std::fmt::Display for 我的错误类型 {
- fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
- match self {
- 我的错误类型::枚举1 => write!(f, "错误原因1"),
- 我的错误类型::枚举2 => write!(f, "错误原因2"),
- 我的错误类型::枚举3(特殊理由) => write!(f, "错误原因3{特殊理由}"),
- 我的错误类型::枚举4 => write!(f, "错误原因4"),
- }
- }
- }
复制代码
在库里开发的时候,一般都用 Result<T, E> 方便调用者检测到错误后调用其它的方案解决问题;但是如果调用者根本不看文档而直接输入了离谱的参数,那就直接 panic 吧。 |
|