有没有一种简单的方法可以将 an 转换Option<Result<T, E>>为 an ,并在出现错误时Option<T>返回?Err
您可以使用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。