面试题答案
一键面试// 定义自定义错误类型
#[derive(Debug)]
struct MyError {
message: String,
}
impl std::fmt::Display for MyError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.message)
}
}
impl std::error::Error for MyError {}
// 定义一个函数,通过返回Result类型值来抛出该自定义错误
fn divide(a: i32, b: i32) -> Result<i32, MyError> {
if b == 0 {
Err(MyError {
message: "除数不能为零".to_string(),
})
} else {
Ok(a / b)
}
}
fn main() {
let result = divide(10, 0);
match result {
Ok(result) => println!("结果是: {}", result),
Err(error) => eprintln!("发生错误: {}", error),
}
}
在上述代码中:
- 首先使用
derive(Debug)
来为自定义错误类型MyError
自动生成Debug
trait 的实现,方便调试时查看错误信息。 - 为
MyError
实现Display
trait 以便于格式化输出错误信息。 - 实现
Error
trait,这是Rust中错误类型的标准trait。 divide
函数接收两个i32
类型参数,如果除数为零则返回Err
,包含自定义错误MyError
,否则返回Ok
包含计算结果。- 在
main
函数中调用divide
函数,并通过match
语句来处理可能返回的Result
类型值。如果是Ok
则打印结果,Err
则打印错误信息。