面试题答案
一键面试Result类型的作用
在Rust中,Result
类型用于处理可能会失败的操作。它是一个枚举类型,定义如下:
enum Result<T, E> {
Ok(T),
Err(E),
}
Ok
变体用于表示操作成功,并包含操作结果T
。Err
变体用于表示操作失败,并包含错误信息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),
}
}
在上述代码中:
- 定义了自定义错误类型
DivisionError
,并为其实现了Debug
、Display
和Error
trait。 divide
函数接受两个i32
类型的参数,进行除法运算。如果除数为零,返回Err
变体,包含DivisionError
类型的错误信息;否则,返回Ok
变体,包含除法结果。- 在
main
函数中,通过match
语句对divide
函数的返回值进行处理,分别打印成功结果或错误信息。