面试题答案
一键面试use std::fs::File;
use std::io::{self, Read};
use std::num::ParseIntError;
fn complex_calculation(n: i32) -> Option<i32> {
// 这里假设复杂计算是简单的 n * 2
Some(n * 2)
}
fn process_file() -> Option<i32> {
let result = File::open("your_file.txt")
.and_then(|mut file| {
let mut content = String::new();
file.read_to_string(&mut content).map(|_| content)
})
.and_then(|s| s.parse::<i32>().ok())
.and_then(complex_calculation);
result
}
- 首先使用
File::open
尝试打开文件,如果成功则进入下一个and_then
。 - 在第二个
and_then
中,将打开的文件读取到String
中,如果成功则返回该String
。 - 第三个
and_then
使用parse::<i32>
将字符串解析为i32
,如果成功则返回该i32
。 - 最后一个
and_then
调用complex_calculation
对解析后的整数进行复杂计算,并返回结果。
这样通过 and_then
链式调用,在每一步处理中,如果前一步返回 None
或 Err
,则整个链式调用提前结束,有效处理了错误和空值情况。