MST

星途 面试题库

面试题:Rust中结合闭包与Result和Option的模式匹配优化

给定一系列操作,首先从文件读取内容(返回`Result<String, io::Error>`),然后将读取的字符串解析为整数(返回`Result<i32, std::num::ParseIntError>`),如果解析成功,对该整数进行一些复杂计算(返回`Option<i32>`)。请使用模式匹配和闭包将这些操作链式处理,尽量减少代码的重复,并高效地处理各种可能的错误和空值情况。
20.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
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
}
  1. 首先使用 File::open 尝试打开文件,如果成功则进入下一个 and_then
  2. 在第二个 and_then 中,将打开的文件读取到 String 中,如果成功则返回该 String
  3. 第三个 and_then 使用 parse::<i32> 将字符串解析为 i32,如果成功则返回该 i32
  4. 最后一个 and_then 调用 complex_calculation 对解析后的整数进行复杂计算,并返回结果。

这样通过 and_then 链式调用,在每一步处理中,如果前一步返回 NoneErr,则整个链式调用提前结束,有效处理了错误和空值情况。