我有一个返回 Result
的函数:
fn find(id: &Id) -> Result<Item, ItemError> {
// ...
}
然后另一个像这样使用它:
let parent_items: Vec<Item> = parent_ids.iter()
.map(|id| find(id).unwrap())
.collect();
如何处理 map
迭代中的失败情况?
我知道我可以使用 flat_map
,在这种情况下,错误结果将是 被忽略了:
let parent_items: Vec<Item> = parent_ids.iter()
.flat_map(|id| find(id).into_iter())
.collect();
根据成功状态的不同,Result
的迭代器有0或1个条目,如果是0,flat_map
将过滤掉它。
但是,我不希望出现 忽略错误,我想让整个代码块停止并返回一个新的错误(基于映射中出现的错误,或者只是转发现有的错误)。
在 Rust 我该怎么处理这件事?