面试题答案
一键面试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
可能返回的 None
和 process_data
可能返回的 Err
情况。