当前位置:  开发笔记 > 编程语言 > 正文

如何将Option <Result <T,Error >>转换为Option <T>而不解包它?

如何解决《如何将Option<Result<T,Error>>转换为Option<T>而不解包它?》经验,为你挑选了2个好方法。



1> Wesley Wiser..:

你可以使用ok()unwrap_or()功能:

fn test() -> Option> {
    Some(Ok(1))
}

fn main() {
    let x: Option> = test();
    println!("{:?}", x.map(|r| r.ok()).unwrap_or(None));
}



2> Shepmaster..:

Option>您可以组合:而不是首先创建一个:

    Option::and_then,它应用一个返回Option和平展结果的闭包.

    Result::ok,它转换一个ResultOption,丢弃错误.

fn main() {
    let some_option = Some("too".to_owned()); 
    let new_option = some_option.and_then(|x| x.parse::().ok()); 
}

您可以使用相同的两个工具来回答您的直接问题:

fn convert(a: Option>) -> Option {
    a.and_then(Result::ok)
}

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有