在 Optional 中展开结果

Mat*_*haq 4 rust

有没有一种规范的方法可以转换Option<Result<T>>Result<Option<T>>

fn optres_to_resopt<T>(optres: Option<Result<T>>) -> Result<Option<T>> {
    if let Some(res) = optres {
        match res {
            Ok(v) => Ok(Some(v)),
            Err(e) => Err(e),
        }
    } else {
        Ok(None)
    }
}
Run Code Online (Sandbox Code Playgroud)

edw*_*rdw 6

Option::transpose

fn optres_to_resopt<T>(optres: Option<Result<T>>) -> Result<Option<T>> {
    optres.transpose()
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,实现基本上是你的功能:

pub fn transpose(self) -> Result<Option<T>, E> {
    match self {
        Some(Ok(x)) => Ok(Some(x)),
        Some(Err(e)) => Err(e),
        None => Ok(None),
    }
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

172 次

最近记录:

5 年,9 月 前