面试题答案
一键面试区别
unwrap_or_else
:- 当
Result
是Ok
时,返回Ok
中的值。 - 当
Result
是Err
时,执行传入的闭包,并返回闭包的结果。它允许根据错误情况动态生成一个默认值。
- 当
expect
:- 当
Result
是Ok
时,返回Ok
中的值。 - 当
Result
是Err
时,expect
会使程序恐慌(panic),并打印出传入的错误信息。它主要用于调试和开发阶段,当某个操作不应该失败但实际失败时,用expect
可以快速定位问题。
- 当
示例代码
unwrap_or_else
示例:
fn divide(a: i32, b: i32) -> Result<i32, &'static str> {
if b == 0 {
Err("division by zero")
} else {
Ok(a / b)
}
}
fn main() {
let result1 = divide(10, 2);
let result2 = divide(10, 0);
let value1 = result1.unwrap_or_else(|_| 0);
let value2 = result2.unwrap_or_else(|err| {
println!("Error: {}", err);
-1
});
println!("Value1: {}", value1);
println!("Value2: {}", value2);
}
expect
示例:
fn divide(a: i32, b: i32) -> Result<i32, &'static str> {
if b == 0 {
Err("division by zero")
} else {
Ok(a / b)
}
}
fn main() {
let result1 = divide(10, 2);
let result2 = divide(10, 0);
let value1 = result1.expect("Division should succeed");
let value2 = result2.expect("Division should not fail");
println!("Value1: {}", value1);
println!("Value2: {}", value2);
}
在上述expect
示例中,result2.expect("Division should not fail")
会导致程序恐慌并打印出Division should not fail
以及错误信息division by zero
。而unwrap_or_else
示例中,result2
为Err
时,会执行闭包,打印错误信息并返回-1
。