如何 运行 结果上的函数或默认值?

How do I run a function on a Result or default to a value?

我们希望 运行 函数在 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 在单个项目结果上。有更好的方法吗?

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

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

或者,如果您发现 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,
};

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