MST

星途 面试题库

面试题:Rust自定义错误类型及从函数中返回自定义错误

在Rust中,如何自定义一个错误类型?请给出一个示例,定义一个自定义错误类型,并在一个函数中通过返回Result类型值来抛出该自定义错误,同时展示如何在调用该函数的地方处理这个自定义错误。
37.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义自定义错误类型
#[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),
    }
}

在上述代码中:

  1. 首先使用derive(Debug)来为自定义错误类型MyError自动生成Debug trait 的实现,方便调试时查看错误信息。
  2. MyError实现Display trait 以便于格式化输出错误信息。
  3. 实现Error trait,这是Rust中错误类型的标准trait。
  4. divide函数接收两个i32类型参数,如果除数为零则返回Err,包含自定义错误MyError,否则返回Ok包含计算结果。
  5. main函数中调用divide函数,并通过match语句来处理可能返回的Result类型值。如果是Ok则打印结果,Err则打印错误信息。