迭代器的谓词返回Result<bool, E>,如何停止迭代并返回错误

问题描述 投票:0回答:1
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 时,如何停止迭代并返回错误?

rust iterator
1个回答
0
投票

您可以使用

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)),
})
© www.soinside.com 2019 - 2024. All rights reserved.