を返す関数があります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 のアイテムがあり、0flat_map
の場合は除外されます。
ただし、エラーを無視したくはありません。代わりに、コード ブロック全体を停止して新しいエラーを返すようにしたい (マップ内で発生したエラーに基づいて、または単に既存のエラーを転送する)。
Rustでこれを最もよく処理するにはどうすればよいですか?