如何在 Rust 的 filter() 函数中处理错误?

3

我希望使用一个筛选函数,该函数可能会返回一个Err结果,并将其传递到包含的函数中:

mycoll.into_iter()
  .filter(|el| {
    if el == "bad" {
      Err(MyError)
    } else {
      Ok(el < "foo")
    }
  })

我在这方面找到了一个很好的解释,关于如何处理使用 map() 时遇到的这种情况(通过使用 .collect::<Result<...>>()),请参考以下链接:如何在 Iterator::map 返回 Result::Err 时停止迭代并返回错误?但我无法找到类似的解决方案适用于 filter()

这里有什么惯用的解决方案?

1个回答

6

我建议您使用filter_map。您的示例代码将如下所示:

mycoll.into_iter()
  .filter_map(|el| {
    if el == "bad" {
      Some(Err(MyError))
    } else if el < "foo" {
      Some(Ok(el))
    } else {
      None
    }
  })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接