我更喜欢使用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()。然而,这种方法感觉很笨拙。
2条答案
按热度按时间b09cbbtk1#
let
-else
没有,但还有另一个可用的结构,在let
-else
之前使用的结构:字符串
这样就避免了嵌套,但对于
Ok(result) => result
有一些代码重复。vatpfxk52#
在
let-else
语句的else
分支中打印Error
,不带match
:字符串