type E = String;
fn helper() -> Result<char, E> {
let pred = |x| -> Result<bool, E> {
if x % 3 {
Ok(x % 2)
} else {
Err("error".to_string())
}
};
let it = "abcde".chars().filter(pred);
return it.next()
}
你如何解决这个问题?捕获对
Option<E>
? 的可变引用
这是类似问题的解决方案,但对于
map
当 Iterator::map 返回 Result::Err 时,如何停止迭代并返回错误?
filter_map()
:
let mut it = "abcde".chars().filter_map(|item| match pred(item) {
Ok(should_return) => should_return.then_some(Ok(item)),
Err(err) => Some(Err(err)),
});
return it.next();
find_map()
如果您想要的只是 next()
:
"abcde".chars().find_map(|item| match pred(item) {
Ok(should_return) => should_return.then_some(Ok(item)),
Err(err) => Some(Err(err)),
})