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

Jam*_*eet 2 rust

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

let Ok(result) = function_call_that_returns_a_result() else {
   return "error message".into();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用 if let、else 或 match 语句,我就可以访问内部的实际错误消息。

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

有没有一种简单的方法可以避免使用第二种方法?因为如果我这样使用它,我会得到额外的嵌套。

if let Some(value) = function_call_that_returns_a_result() {
   // value is available one level nested
}
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*man 6

不适用于let- else,但还有另一种可用的构造,即之前使用过的let- else

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

这样可以避免嵌套,但会导致Ok(result) => result.


Kap*_*lan 5

在声明的手臂Error中打印w/o :elselet-elsematch

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