面试题答案
一键面试- unwrap_or_else的处理方式:
unwrap_or_else
会在Result
值为Err
时执行传入的闭包,并返回闭包的结果。它允许你自定义错误处理逻辑,而不是直接使程序崩溃。- 代码示例(以Rust为例):
use std::fs::File; fn main() { let file = File::open("nonexistent_file.txt").unwrap_or_else(|error| { eprintln!("文件不存在,错误: {}", error); std::process::exit(1); }); // 这里可以继续对file进行操作 }
- expect的处理方式:
expect
当Result
值为Err
时,会打印出传入的错误信息并使程序崩溃。它主要用于调试阶段,快速定位问题所在。- 代码示例(以Rust为例):
use std::fs::File; fn main() { let file = File::open("nonexistent_file.txt").expect("文件不存在"); // 如果文件不存在,程序在此处崩溃并打印 "文件不存在" // 这里不会执行到对file的后续操作 }
- 选择建议及原因:
- 选择
unwrap_or_else
的场景:在生产环境中,希望程序在遇到文件不存在的错误时能够进行适当的错误处理(如记录日志、提示用户、尝试其他操作等),而不是直接崩溃,此时unwrap_or_else
更合适。它给予开发者更多的控制权来自定义错误处理逻辑。 - 选择
expect
的场景:在开发和调试阶段,希望在遇到文件不存在这类错误时能够快速定位问题,直接让程序崩溃并输出错误信息是很有帮助的,此时expect
比较适用。它简单直观,能快速暴露问题。
- 选择