【问题标题】:What is the cleanest way to return the error when matching a Result<T, E>? [duplicate]匹配 Result<T, E> 时返回错误的最简洁方法是什么? [复制]
【发布时间】:2020-07-08 17:46:35
【问题描述】:

我正在调用一个返回Result&lt;T, E&gt; 的函数,我想处理Ok 的情况,但如果返回错误,则返回Err。最干净的方法是什么?

例如,我有:

fn example() -> Result<(), Error> {
    match foo() {
        Ok(v) => bar(v),
        Err(e) => Err(e),
    }
}

有哪些其他的写作形式?在堆栈中的每个调用中将e 重新包装在另一个Err 中感觉很奇怪。此外,每个调用基本上都是 4 行样板文件......我只是在寻找一种简化并使其更具可读性的方法。我的愿望是让它在错误时返回错误,否则处理结果值。

【问题讨论】:

标签: error-handling rust


【解决方案1】:

Rust 包含一个'error propagation' operator, ?。如果调用它的Result 的值为Ok,它将展开并返回内部值。如果值为Err,它将从函数返回并将Err 传递给调用者。

fn example() -> Result<(), Error> {
    let v = foo()?;
    bar(v);
}

【讨论】:

  • 天哪,你是救生员。我记得看到过这个,但我认为它是在 Result 类型的重力卡住之前,所以没有保留它。
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 2012-05-26
  • 2017-12-25
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
相关资源
最近更新 更多