E>?
Я пока придумал только с двуми флипами:
fn flip<L, R>(either: Result<L, R>) -> Result<R, L> {
match either {
Ok(l) => Err(l),
Err(r) => Ok(r),
}
}
flip(iter.map(flip).collect())
мб с unzip-ом как-нибудь выйдет?
А если будет больше чем один Ok(T) какое поведение ты хочешь?
Вернуть первый. Т.е.: ровно как с Result<_, _<_>>, но наоборот
Можно еще вот так извратиться: [Err(1), Ok(2), Err(3)] .iter() .try_fold(vec![], |mut acc, x| x.map(Err).unwrap_or_else(|err| { acc.push(err); Ok(acc) })) .map(Err) .unwrap_or_else(Ok); Странно что нет флипа в стандартном Result.
Потому что флип на Result это семантически странно, это же не Either
По факту это Either и есть, приправленный синтаксическим сахаром. Это безотносительно обсуждаемого куска кода.
А тогда надо в Result<Vec<_>, E>
Мне первый Ok(_) вернуть, а ошибки коллекционировать.
Раззница исключительно смысловая, это да.
Обсуждают сегодня