如何在rust中打印let-else语句中的错误?

ggazkfy8  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(132)

我更喜欢使用let else语句,因为它可以去除代码中的嵌套

let Ok(result) = function_call_that_returns_a_result() else {
   return "error message".into();
}

字符串
但是,如果我使用iflet、else或match语句,我就可以访问其中的实际错误消息。

if let Err(err) = function_call_that_returns_a_result() {
  return format!("Error: {}", error).into();
}


有没有简单的方法可以避免使用第二种方法?因为如果我这样用它,我会得到更多的巢。

if let Some(value) = function_call_that_returns_a_result() {
   // value is available one level nested
}


其他方法也值得考虑。我想避免两次检查同一个可选选项,否则,我只检查一次,打印错误,然后在保证它不包含错误后unwrap()。然而,这种方法感觉很笨拙。

b09cbbtk

b09cbbtk1#

let-else没有,但还有另一个可用的结构,在let-else之前使用的结构:

let result = match function_call_that_returns_a_result() {
    Ok(result) => result,
    Err(error) => return format!("Error: {}", error).into(),
};

字符串
这样就避免了嵌套,但对于Ok(result) => result有一些代码重复。

vatpfxk5

vatpfxk52#

let-else语句的else分支中打印Error,不带match

fn main() {
    let result = function_call_that_returns_a_result(); // Result
    let Ok(ok) = result else {
        println!("{}", result.err().unwrap());
        return;
    };
    println!("{ok}");
}

字符串

相关问题