假设我有一个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,我想避免。