Rust中如何使用match匹配处理Result<>类型的函数返回值
完全可以,match 是 Rust 处理 Result 枚举最原生也最常用的方式,刚好可以满足你「成功走业务逻辑、失败走错误处理」的需求。
你可以把示例代码中注释为 // here 的位置替换为如下逻辑:
match get_pokemon(&args[1]).await { // 匹配成功分支,拿到返回的字符串内容 Ok(body) => { // 注意:parse_response 是异步函数,需要加 .await 才能拿到最终的 Pokemon 实例 let pokemon = parse_response(body).await; // 这里写请求成功后的业务逻辑,比如打印宝可梦信息等 println!("宝可梦数据获取完成"); } // 匹配失败分支,拿到错误信息 Err(err) => { // 这里写自定义错误处理逻辑,比如打印错误、上报、优雅退出等 eprintln!("请求宝可梦接口失败: {}", err); std::process::exit(1); } }
如果你的场景不需要精细化处理错误分支,也可以用更简洁的 if let 语法:
if let Ok(body) = get_pokemon(&args[1]).await { let pokemon = parse_response(body).await; // 成功逻辑 } else { // 失败默认处理 eprintln!("请求失败"); }
额外提一个现有代码的小问题:你定义的 parse_response 是异步函数,原代码直接调用没有加 .await,会导致拿到的是 Future 实例而非 Pokemon 结构体,运行时会报错,上面的示例代码已经修正了这个问题。
内容的提问来源于stack exchange,提问作者dxbednarczyk
相关产品推荐
相关产品推荐

