将'Option <result <_,_ =“”>&gt;`转换为`Result <option <_>,_&gt;的最佳方法

时间:2017-06-22 17:31:04

标签: rust

在更大的应用程序中,我有许多返回Result<_, _>的函数。感谢?我可以轻松地撰写这些内容。不幸的是,我的代码有时自然会导致Option<Result<_, _>>。拿这个假的例子:

std::env::args().nth(1)
    .and_then(|filename| File::open(filename))

为了轻松编写可能失败的函数,我希望Result处于非常“外层”。当然,match会有所帮助:

match std::env::args().nth(1) {
    Some(filename) => File::open(filename).map(|f| Some(f)),
    None => Ok(None),
}

但这写起来相当冗长乏味。我正在寻找一个有助于这种转换的功能。我以某种方式提醒FromIterator<Result<A, E>>的{​​{1}} impl - 它还将Result<V, E> where V: FromIterator<A>拉到外层。

那么实现我想要的最好方法是什么?编写自己的辅助函数或宏也是可以的。

0 个答案:

没有答案