面试题答案
一键面试-
使用
unwrap_or_else
方法:fn main() { let result: Result<i32, String> = Err("Error occurred".to_string()); let value = result.unwrap_or_else(|err| { eprintln!("Error: {}", err); -1 }); println!("Value: {}", value); }
- 代码实现:
unwrap_or_else
接受一个闭包作为参数。当Result
是Err
时,闭包会被调用,闭包可以根据错误进行处理并返回一个默认值。 - 行为:无论
result
是Ok
还是Err
,程序都会继续执行。如果是Ok
,则返回Ok
中的值;如果是Err
,则执行闭包并返回闭包的返回值。 Err
时表现:执行闭包中的代码,比如这里会打印错误信息,然后返回闭包中指定的默认值(这里是-1
)。
- 代码实现:
-
使用
expect
方法:fn main() { let result: Result<i32, String> = Err("Error occurred".to_string()); let value = result.expect("Error happened"); println!("Value: {}", value); }
- 代码实现:
expect
接受一个字符串作为参数,这个字符串用于在Err
时作为错误信息。 - 行为:如果
result
是Ok
,则返回Ok
中的值;如果是Err
,则程序会以指定的错误信息恐慌(panic!
)并终止。 Err
时表现:程序会panic!
,打印出expect
中传入的错误信息和Err
中的具体错误信息,然后终止程序。
- 代码实现:
总结:unwrap_or_else
允许在Err
时进行自定义处理并继续执行程序,而expect
在Err
时会使程序恐慌并终止,适用于期望操作不会失败,失败则意味着程序逻辑错误的场景。