MST

星途 面试题库

面试题:Rust中Option和Result的组合处理

假设有两个函数,`fetch_data`返回`Option<i32>`类型数据,`process_data`接收`i32`并返回`Result<String, String>`类型结果。请编写代码调用`fetch_data`,若获取到数据则传递给`process_data`进行处理,并恰当处理可能出现的`None`和`Err`情况,最终返回一个`Result<String, String>`。
48.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn fetch_data() -> Option<i32> {
    // 这里是模拟返回数据的逻辑,比如Some(5)
    Some(5)
}

fn process_data(data: i32) -> Result<String, String> {
    // 这里是处理数据的逻辑,比如Ok(data.to_string())
    Ok(data.to_string())
}

fn main() {
    let result = match fetch_data() {
        Some(data) => process_data(data),
        None => Err("fetch data failed".to_string())
    };

    match result {
        Ok(data) => println!("Processed data: {}", data),
        Err(err) => println!("Error: {}", err)
    }
}

这段代码中,fetch_data 模拟获取 Option<i32> 类型的数据,process_data 模拟处理 i32 类型的数据并返回 Result<String, String> 类型的结果。在 main 函数中,通过 match 语句处理 fetch_data 返回的 Option 数据,如果是 Some,则传递给 process_data 处理,如果是 None 则返回错误。最终通过 match 处理 process_data 的结果,输出处理后的数据或错误信息。

如果需要返回 Result<String, String> 类型,可以将上述代码中的 main 函数修改为以下形式:

fn fetch_data() -> Option<i32> {
    // 这里是模拟返回数据的逻辑,比如Some(5)
    Some(5)
}

fn process_data(data: i32) -> Result<String, String> {
    // 这里是处理数据的逻辑,比如Ok(data.to_string())
    Ok(data.to_string())
}

fn handle_fetch_and_process() -> Result<String, String> {
    match fetch_data() {
        Some(data) => process_data(data),
        None => Err("fetch data failed".to_string())
    }
}

这样 handle_fetch_and_process 函数返回 Result<String, String> 类型,恰当处理了 fetch_data 可能返回的 Noneprocess_data 可能返回的 Err 情况。