面试题答案
一键面试- 定义错误类型结构体:首先定义一个结构体,这个结构体将作为我们的自定义错误类型,结构体中包含用于存储错误相关信息的内部字段。
- 实现
std::error::Error
特征:为这个结构体实现std::error::Error
特征,std::error::Error
特征要求实现description
方法(在 Rust 1.33 版本后已弃用,可通过Display
特征替代)和source
方法(用于获取底层错误源,可选实现),通常还会实现Debug
和Display
特征。
以下是示例代码:
use std::fmt;
// 定义自定义错误类型结构体
struct MyError {
message: String,
}
// 实现 Display 特征,用于格式化输出错误信息
impl fmt::Display for MyError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.message)
}
}
// 实现 Debug 特征,用于调试时输出错误信息
impl fmt::Debug for MyError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "MyError {{ message: {} }}", self.message)
}
}
// 实现 Error 特征
impl std::error::Error for MyError {}
fn main() {
let result = some_function_that_might_fail();
match result {
Ok(_) => println!("Operation successful"),
Err(e) => println!("Error: {}", e),
}
}
fn some_function_that_might_fail() -> Result<(), MyError> {
// 模拟一些可能失败的操作
let should_fail = true;
if should_fail {
Err(MyError {
message: "This is a custom error".to_string(),
})
} else {
Ok(())
}
}