【问题标题】:Idiomatic way to just return Err() on expression evaluation to false在表达式评估中将 Err() 返回为 false 的惯用方法
【发布时间】:2021-07-04 13:55:16
【问题描述】:

我正在寻找的只是有一个像这样的单行:

assert!( 1 == 2 );

但不想恐慌,只想返回MyErr()

现在我是这样实现的:

(1==2).then(|| ()).ok_or(MyErr())?;

有没有更简洁的方法来做同样的事情?

【问题讨论】:

  • @Krish 我不认为这是重复的,因为我已经足够具体了,建议的解决方案就像我现在正在使用的那样。
  • 只是徘徊,是否有一些标准宏用于此目的?不想通过命名自己的宏来重新发明轮子。
  • 只需使用 if 语句:if !(1==2) { return Err(e) }

标签: error-handling rust boolean-expression early-return


【解决方案1】:

正如@Krish 提到的,在这里使用if 声明。作为参考,这也是bool.then 基本上所做的:

pub fn then<T, F: FnOnce() -> T>(self, f: F) -> Option<T> {
    if self { Some(f()) } else { None }
}

【讨论】:

    【解决方案2】:

    目前看来最好的选择是:

    if !(1==2) { return Err() }
    

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 1970-01-01
      • 2021-12-22
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多