我知道x.unwrap()当x: Result<T, E>不实现时不起作用E:Debug需要unwrap()打印出Err变体以防万一x.is_err(),但它不能。然而,有时,尤其是在测试中,我确实需要掌握其Ok值。我以为x.expect()会成功,因为我是在失败时指定消息的人。然而,由于某种原因,我也不完全理解,expect()需要E: Debug。这意味着我总是最终采取冗长、重复的方式:
let x_ok = match x {
Ok(x_ok) => x_ok,
Err(_) => panic!("Something went horribly wrong!"),
}
Run Code Online (Sandbox Code Playgroud)
我无法想象这个问题不会有更标准化的解决方案,但我很难找到一个。get_ok_or_panic如果Erra 的类型Result没有实现,如何快速实现Debug?
惯用的代码只会转发错误:
\nfn do_it() -> Result<(), E> {\n let x_ok = x_ok?;\n // work with x_ok\n Ok(())\n}\nRun Code Online (Sandbox Code Playgroud)\n或在可能的情况下优雅地处理错误:
\nlet x_ok = x_ok.unwrap_or(sane_default);\nRun Code Online (Sandbox Code Playgroud)\n如果两者都不是一个选择,并且您绝对必须恐慌,您可以使用let \xe2\x80\xa6 else:
let Ok(x_ok) = x_ok else { panic!("Something went horribly wrong") };\nRun Code Online (Sandbox Code Playgroud)\n
典型的解决方法是使用unwrap_or_else():
let x_ok = x.unwrap_or_else(|_| panic!("Something went horribly wrong!"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1394 次 |
| 最近记录: |