面试题答案
一键面试use std::error::Error;
use std::fmt;
// 自定义错误类型
#[derive(Debug)]
struct MyError {
message: String,
}
// 为MyError实现Error trait
impl Error for MyError {}
// 为MyError实现fmt::Display trait
impl fmt::Display for MyError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.message)
}
}
// 定义一个函数,返回自定义错误类型
fn divide(a: i32, b: i32) -> Result<i32, MyError> {
if b == 0 {
Err(MyError {
message: "除数不能为零".to_string(),
})
} else {
Ok(a / b)
}
}
你可以通过以下方式调用这个函数:
fn main() {
match divide(10, 2) {
Ok(result) => println!("结果: {}", result),
Err(e) => eprintln!("错误: {}", e),
}
match divide(10, 0) {
Ok(result) => println!("结果: {}", result),
Err(e) => eprintln!("错误: {}", e),
}
}