У меня есть функция, которая возвращает 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 элемент в зависимости от состояния успеха, а flat_map
будет отфильтровывать его, если он равен 0.
Однако я не хочу игнорировать ошибки, вместо этого хочу, чтобы весь блок кода просто остановился и возвратил новую ошибку (на основе ошибки, возникшей на карте или просто пересылающей существующую ошибку).
Как лучше всего справиться с этим в Rust?