MST
星途 面试题库

面试题:Rust枚举类型与模式匹配在错误处理及泛型中的深度应用

定义一个泛型枚举`ResultEnum<T, E>`,类似标准库中的`Result`,用于表示操作的成功或失败,成功时包含类型为`T`的值,失败时包含类型为`E`的错误信息。然后定义一个函数`parse_number`,它接收一个字符串切片`&str`,尝试将其解析为`i32`。如果解析成功,返回`ResultEnum::Ok(i32)`,如果失败返回`ResultEnum::Err(String)`,错误信息为解析失败的原因。接着编写一个函数`process_numbers`,它接收一个`Vec<ResultEnum<i32, String>>`,通过模式匹配处理每个结果,将所有成功解析的数字累加起来,遇到失败时,将错误信息收集到一个`Vec<String>`中,最后返回累加结果和错误信息的收集结果。
31.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义泛型枚举
enum ResultEnum<T, E> {
    Ok(T),
    Err(E),
}

// 定义解析函数
fn parse_number(s: &str) -> ResultEnum<i32, String> {
    match s.parse::<i32>() {
        Ok(num) => ResultEnum::Ok(num),
        Err(e) => ResultEnum::Err(e.to_string()),
    }
}

// 定义处理函数
fn process_numbers(results: Vec<ResultEnum<i32, String>>) -> (i32, Vec<String>) {
    let mut sum = 0;
    let mut errors = Vec::new();
    for result in results {
        match result {
            ResultEnum::Ok(num) => sum += num,
            ResultEnum::Err(err) => errors.push(err),
        }
    }
    (sum, errors)
}