我是铁 rust 新手,正在寻找好的风格选项来处理以下问题:

让我们假设foo返回Option<i32>.我在循环中调用foo,在返回None的情况下,我只是想继续前进.现在,我发现自己在做一些类似的事情:

for _whatever in something {
  data = foo();
  if data.is_none() {
    continue;
  }
  let data = data.unwrap();
  // other stuff
}

不错,可读性很好,但我不禁觉得它可以更简洁.这感觉像是一个非常常见的用例,我想知道我还可以有什么其他 Select 来实现类似的结果,以及是否有以这种方式处理None的公认最佳实践.

我试着在is_none上使用match个语句和条件句,发现后者稍好一些.

推荐答案

if let美元可能会有帮助

for _whatever in something {
    if let Some(data) = foo() {
        // other stuff
    }
}

Rust相关问答推荐

当rust中不存在文件或目录时,std::FS::File::Create().unwire()会抛出错误

MutexGuard中的过滤载体不需要克隆

如何在Rust中将选项<;选项<;字符串>;转换为选项<;选项&;str>;?

定义只有一些字段可以缺省的 struct

循环访问枚举中的不同集合

写入引用会更新基础值,但引用会打印意外的值

在Rust内联程序集中使用字符串常量

在使用粗粒度锁访问的数据 struct 中使用 RefCell 是否安全?

从 rust 函数返回 &HashMap

如何正确使用git2::Remote::push?

go 重并堆积MPSC通道消息

无法将`&Vec>`转换为`&[&str]`

仅当函数写为闭包时才会出现生命周期错误

从 HashMap>, _> 中删除的生命周期问题

为什么传递 option.as_ref 的行为不同于使用匹配块并将内部映射到 ref 自己?

Rust 将特性传递给依赖项

在空表达式语句中移动的值

通用类型,不同于输入类型,作为函数的返回值

BigUint 二进制补码

如何在宏中的多个参数上编写嵌套循环?