MST

星途 面试题库

面试题:Rust中如何优雅地处理和传递富错误信息

在Rust中,当你需要在不同函数之间传递富错误信息时,举例说明如何使用`Result`类型来处理可能出现的多种错误情况。比如,假设有一个函数`read_file`读取文件内容,若文件不存在返回一个自定义的`FileNotFound`错误,若文件权限不足返回`PermissionDenied`错误,展示该函数的实现及调用处理方式。
37.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义自定义错误类型
#[derive(Debug)]
enum MyError {
    FileNotFound,
    PermissionDenied,
}

// 读取文件内容的函数
fn read_file(file_path: &str) -> Result<String, MyError> {
    if std::path::Path::new(file_path).exists() {
        if std::fs::metadata(file_path).map_err(|_| MyError::PermissionDenied)?.permissions().readonly() {
            return Err(MyError::PermissionDenied);
        }
        std::fs::read_to_string(file_path).map_err(|_| MyError::FileNotFound)
    } else {
        Err(MyError::FileNotFound)
    }
}

fn main() {
    let file_path = "nonexistent_file.txt";
    match read_file(file_path) {
        Ok(content) => println!("File content: {}", content),
        Err(err) => match err {
            MyError::FileNotFound => println!("The file was not found."),
            MyError::PermissionDenied => println!("Permission denied for the file."),
        },
    }
}

在上述代码中:

  1. 首先定义了自定义错误类型MyError,它有两个变体FileNotFoundPermissionDenied
  2. read_file函数接收一个文件路径作为参数,根据文件是否存在以及权限情况返回不同的错误,若成功读取文件则返回文件内容。
  3. main函数中调用read_file,通过match语句处理不同的错误情况。