将 Option<Result<T, E>> 转换为 Option<T>

Pon*_*kul 2 rust

有没有一种简单的方法可以将 an 转换Option<Result<T, E>>为 an ,并在出现错误时Option<T>返回?Err

Net*_*ave 9

您可以使用transpose,它正是这样做的。

fn main() -> Result<(), String> {
    let _foo: Option<usize> = Some(Err("Foo".to_string())).transpose()?;
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

操场

请注意,它转换Option<Result<T, E>>Result<Option<T>, E>。您只需要使用?orunrwrap/except方法来获取Option<T>if is not an E