我有一个生锈程序,它有多个嵌套的匹配语句,如下所示。
match client.get(url).send() {
Ok(mut res) => {
match res.read_to_string(&mut s) {
Ok(m) => {
match get_auth(m) {
Ok(k) => k,
Err(_) => return Err(“a”);
}
},
Err(_) => {
return Err(“b”);
}
}
},
Err(_) => {
return Err(“c”);
},
};
所有变量k和m都是String.I类型,我正在寻找一种方法,通过删除过多的嵌套匹配语句来提高代码的可读性,保持错误处理的完整性,因为输出和错误类型对problem.Is都很重要,通过unwrap_or_else可以实现这一点吗?
发布于 2022-07-18 22:03:36
.map_err()
实用程序将Result
转换为新的错误类型,而不使用成功类型。它接受一个使用现有错误值并返回新错误值的闭包。
?
操作符将提前返回Err
情况下的错误,并在Ok
情况下展开。
将这两者结合在一起可以让您简洁地表达相同的流程:
get_auth(
client.get(url).send().map_err(|_| "c")?
.read_to_string(&mut s).map_err(|_| "b")?
).map_err(|_| "a")?
(我怀疑您实际上想将s
传递给get_auth()
,但这不是您问题中的代码所做的,所以我选择表示您发布的代码,而不是我猜测的假想代码。)
https://stackoverflow.com/questions/73030019
复制相似问题