Допустим, у меня есть функция f
с подписью
fn f(a: u8) -> Result<bool, SomeError> {}
Теперь у меня есть Vec<u8>
, и я хочу выяснить, есть ли в этом Vec какой-либо элемент, значение которого f
равно Ok(b)
, и, в этом случае, верните значение b
(и прекратите вычисление f
для остальной части Vec).Я хочу иметь функцию с подписью
fn my_function(v: Vec<u8>) -> Option<bool> {}
Вот моя первая реализация:
fn my_function(v: Vec<u8>) -> Option<bool> {
let found = v.par_iter().find_any(|a| f(a).is_ok());
match found {
Some(a) => Some(f(a).unwrap()),
None => None
}
}
Но я делаю один бесполезный f
расчет в конце.Как я могу реорганизовать код, чтобы избежать этого дополнительного f
вызова?
Rayon's map
, filter
, reduce
не будет работать, потому что они проходят через весь Vec, чего я хочу избежать.