MST

星途 面试题库

面试题:Rust中Result类型基础及简单错误链构建

在Rust中,简述Result类型的作用。假设有一个函数`divide`用于两个整数相除,使用Result类型处理可能出现的除零错误,并构建一个简单的错误链,将除零错误包装成自定义错误类型`DivisionError`,展示相关代码。
13.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

Result类型的作用

在Rust中,Result类型用于处理可能会失败的操作。它是一个枚举类型,定义如下:

enum Result<T, E> {
    Ok(T),
    Err(E),
}

Ok变体用于表示操作成功,并包含操作结果TErr变体用于表示操作失败,并包含错误信息E。通过使用Result类型,Rust可以在编译期强制开发者处理可能的错误,避免运行时错误的发生。

代码实现

// 自定义错误类型
#[derive(Debug)]
struct DivisionError {
    message: String,
}

impl std::fmt::Display for DivisionError {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.message)
    }
}

impl std::error::Error for DivisionError {}

fn divide(a: i32, b: i32) -> Result<i32, DivisionError> {
    if b == 0 {
        Err(DivisionError {
            message: "division by zero".to_string(),
        })
    } else {
        Ok(a / b)
    }
}

fn main() {
    match divide(10, 2) {
        Ok(result) => println!("Result: {}", result),
        Err(error) => eprintln!("Error: {}", error),
    }

    match divide(10, 0) {
        Ok(result) => println!("Result: {}", result),
        Err(error) => eprintln!("Error: {}", error),
    }
}

在上述代码中:

  1. 定义了自定义错误类型DivisionError,并为其实现了DebugDisplayError trait。
  2. divide函数接受两个i32类型的参数,进行除法运算。如果除数为零,返回Err变体,包含DivisionError类型的错误信息;否则,返回Ok变体,包含除法结果。
  3. main函数中,通过match语句对divide函数的返回值进行处理,分别打印成功结果或错误信息。