面试题答案
一键面试- 定义自定义错误类型:
在Rust中,可以通过定义一个结构体并为其实现
std::error::Error
trait来定义自定义错误类型。通常还会为其实现Display
trait以便于格式化输出错误信息。use std::fmt; // 定义自定义错误结构体 #[derive(Debug)] struct MyError { message: String, } // 实现Display trait,用于格式化输出错误信息 impl fmt::Display for MyError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.message) } } // 实现Error trait 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() { match divide(10, 2) { Ok(result) => println!("结果: {}", result), Err(error) => eprintln!("错误: {}", error), } match divide(10, 0) { Ok(result) => println!("结果: {}", result), Err(error) => eprintln!("错误: {}", error), } }
上述代码中,首先定义了MyError
作为自定义错误类型,然后在divide
函数中,根据条件返回Result
类型,当出现错误(除数为零)时返回Err
包含自定义错误,正常时返回Ok
包含计算结果。在main
函数中,通过match
语句处理divide
函数的返回结果。