面试题答案
一键面试- 自定义错误类型并实现相关trait:
- 首先,使用
enum
定义自定义错误类型。然后,为该错误类型实现std::fmt::Debug
、std::fmt::Display
以及std::error::Error
trait。
use std::fmt; use std::error::Error; // 自定义错误类型 #[derive(Debug)] enum MyError { // 这里可以定义不同的错误变体 FileNotFound, PermissionDenied, } impl fmt::Display for MyError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { MyError::FileNotFound => write!(f, "文件未找到"), MyError::PermissionDenied => write!(f, "权限被拒绝"), } } } impl Error for MyError {}
- 首先,使用
- 包含自定义错误类型的函数:
- 下面是一个示例函数,它根据条件返回自定义错误。
fn read_file() -> Result<String, MyError> { // 模拟一个条件 let should_fail = true; if should_fail { Err(MyError::FileNotFound) } else { Ok("文件内容".to_string()) } }
- 调用函数并处理自定义错误:
fn main() { match read_file() { Ok(content) => println!("文件内容: {}", content), Err(e) => { eprintln!("发生错误: {}", e); if let MyError::FileNotFound = e { eprintln!("请检查文件路径是否正确"); } else if let MyError::PermissionDenied = e { eprintln!("请检查文件权限"); } } } }
说明:
Debug
trait:#[derive(Debug)]
为我们自动实现了Debug
trait,这使得我们可以在调试时方便地打印错误信息,例如println!("{:?}", error)
。Display
trait:实现Display
trait 允许我们使用{}
格式化输出错误信息,例如println!("{}", error)
。Error
trait:实现Error
trait 是为了让自定义错误类型能够融入标准的错误处理机制,它提供了一些方法来获取错误的原因等信息。在这个简单示例中,我们只是空实现了该trait,因为目前不需要更复杂的错误链等功能。