MST

星途 面试题库

面试题:Rust中如何自定义一个基础的错误类型并实现`std::error::Error` trait

请编写一段Rust代码,自定义一个错误类型`MyError`,并为其实现`std::error::Error` trait ,同时展示如何在函数中返回这个自定义错误类型。
30.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
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),
    }
}