面试题答案
一键面试可恢复异常(Result
类型)
- 实现方式:
Result
是一个枚举类型,定义为enum Result<T, E> { Ok(T), Err(E) }
。通过返回Result
类型,调用者可以选择对成功(Ok
)和失败(Err
)情况分别进行处理,使得程序可以从错误中恢复并继续执行。 - 代码示例:
fn divide(a: i32, b: i32) -> Result<i32, &'static str> {
if b == 0 {
Err("division by zero")
} else {
Ok(a / b)
}
}
fn main() {
let result = divide(10, 2);
match result {
Ok(value) => println!("The result is: {}", value),
Err(error) => println!("Error: {}", error),
}
}
不可恢复异常(panic!
宏)
- 实现方式:
panic!
宏用于表示程序遇到了不可恢复的错误,例如访问越界的数组索引。当panic!
被调用时,程序会打印错误信息,展开栈帧(unwind)并最终终止执行,除非程序在运行时启用了abort
模式,这种情况下程序会立即终止而不展开栈帧。 - 代码示例:
fn main() {
let numbers = vec![1, 2, 3];
let value = numbers[10]; // 这里会触发 panic,因为索引 10 越界
println!("This line will not be printed: {}", value);
}
在上述代码中,访问numbers[10]
会触发panic!
,程序在打印错误信息后终止。