我是 Rust 新手,正在寻找好的样式选项来处理以下内容:
假设foo返回Option<i32>。我正在foo循环调用,如果它返回,None我只想继续前进。现在我发现自己在做类似的事情:
for _whatever in something {
let data = foo();
if data.is_none() {
continue;
}
let data = data.unwrap();
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
还不错,可读性很好,但我忍不住觉得它可以更简洁。None这感觉像是一个非常常见的用例,我想知道我可能需要哪些其他选项来实现类似的目标,以及是否有公认的最佳实践以这种方式处理。
我尝试过match在 上使用语句和条件is_none,发现后者稍好一些。
if let可能会有帮助
for _whatever in something {
if let Some(data) = foo() {
// other stuff
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将其集成到迭代器中并将其展平以删除None值。
for data in something.into_iter().flat_map(|_| foo()) {
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |