MST

星途 面试题库

面试题:Rust函数返回值类型的复杂应用与错误传播

假设有一个Rust程序,需要读取一个文件的内容,将其解析为整数数组,然后计算这些整数的平均值。请编写一系列函数来完成这个任务,每个函数有合理的返回值类型。如果文件读取失败(例如文件不存在),或者解析整数失败,要正确传播错误,并使用`?`操作符简化错误处理。最后展示如何在`main`函数中调用这些函数并处理最终可能出现的错误。
31.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::fs::File;
use std::io::{self, BufRead};
use std::num::ParseIntError;

// 读取文件内容并返回字符串向量
fn read_file_lines(file_path: &str) -> Result<Vec<String>, io::Error> {
    let file = File::open(file_path)?;
    let reader = io::BufReader::new(file);
    reader.lines().collect()
}

// 将字符串向量解析为整数向量
fn parse_lines_to_ints(lines: Vec<String>) -> Result<Vec<i32>, ParseIntError> {
    lines.into_iter().map(|line| line.trim().parse()).collect()
}

// 计算整数向量的平均值
fn calculate_average(ints: Vec<i32>) -> Option<f64> {
    if ints.is_empty() {
        None
    } else {
        Some(ints.iter().sum::<i32>() as f64 / ints.len() as f64)
    }
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let file_path = "example.txt";
    let lines = read_file_lines(file_path)?;
    let ints = parse_lines_to_ints(lines)?;
    let average = calculate_average(ints);

    match average {
        Some(avg) => println!("Average: {}", avg),
        None => println!("No numbers to calculate average."),
    }

    Ok(())
}