Gre*_*mer 8 optional rust rust-result
我首先想到的是map对Option的,但我不能用try!从封闭的内部.该match声明看起来是不必要的,但我无法弄清楚如何简化它.
fn example<T, E>(val: Option<Result<T, E>>) -> Result<Option<T>, E> {
Ok(match val {
Some(v) => Some(v?),
None => None
})
}
Run Code Online (Sandbox Code Playgroud)
你可以使用Option::map_or():
val.map_or(Ok(None), |v| v.map(Some))
Run Code Online (Sandbox Code Playgroud)
在Rust 1.33中,它transpose()是稳定的,因此可以将其称为:
fn main() {
let x: Result<Option<i32>, ()> = Ok(Some(5));
let y: Option<Result<i32, ()>> = Some(Ok(5));
assert_eq!(x, y.transpose());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |