【问题标题】:How do I run a function on a Result or default to a value?如何在结果上运行函数或默认为值?
【发布时间】:2020-09-06 04:09:33
【问题描述】:

我们希望在Result 上运行函数,或者如果结果实际上是错误,则使用默认值。比如:

let is_dir = entry.file_type().is_dir() || false
//                 ^--- file_type() returns a Result
//                                         ^--- default to false if Result is an IOError

目前,我们正在这样做:

let is_dir = entry.file_type().map(|t| t.is_dir()).unwrap_or(false);

但这似乎非常令人困惑,对单个项目结果运行 map。有没有更好的方法?

【问题讨论】:

    标签: rust idioms map-function


    【解决方案1】:

    您可能更熟悉和熟悉 map 函数,因为它在 Iterators 中常用,但使用 mapResults 和 Options 一起工作在 Rust 中也被认为是惯用的。如果你想让你的代码更简洁,你可以像这样使用map_or

    let is_dir = entry.file_type().map_or(false, |t| t.is_dir());
    

    【讨论】:

      【解决方案2】:

      或者,如果您发现 map 不清楚,您可以使用 ifmatch 更明确(和详细):

      let is_dir = if let Ok(file_type) = entry.file_type() {
          file_type.is_dir()
      } else {
          false
      };
      

      let is_dir = match entry.file_type() {
          Ok(file_type) => file_type.is_dir(),
          _ => false,
      };
      

      不一定好或坏,但您可以选择:)

      【讨论】:

        猜你喜欢
        • 2013-07-25
        • 2020-12-07
        • 2015-03-31
        • 2011-11-18
        • 1970-01-01
        • 2018-09-23
        • 1970-01-01
        • 2021-10-27
        • 1970-01-01
        相关资源
        最近更新 更多