如何传递迭代器我正在迭代到函数?

Geo*_*ger 4 iterator rust

我正在遍历一个数组,并且根据当前值,我想将迭代器传递给子函数并让它处理许多值,并在退出子函数时,继续遍历数组.下面是我到目前为止最接近的,但我一直在努力error: use of moved value: 'iter'.

我已经尝试过生活时间,但这对我来说也没有用.我现在花了大半天的时间在这上面,似乎无法随心所欲.任何帮助将不胜感激.谢谢.

enum Thing {
    Three(char, char, char),
    Four(char, char, char, char),
}

fn take_three <'a>(iter: &mut std::slice::Iter<'a, char>) -> Thing {
    let a = iter.next().unwrap();
    let b = iter.next().unwrap();
    let c = iter.next().unwrap();
    Thing::Three(*a,*b,*c)
}

fn take_four <'a>(iter: &mut std::slice::Iter<'a, char>) -> Thing {
    let a = iter.next().unwrap();
    let b = iter.next().unwrap();
    let c = iter.next().unwrap();
    let d = iter.next().unwrap();
    Thing::Four(*a,*b,*c,*d)
}

fn parse_tokens (tokens: &Vec<char>) {
    let mut iter = tokens.iter();
    let mut things: Vec<Thing> = vec![];
    for token in iter {
        match token {
            &'a' => things.push(take_three(&mut iter)),
            &'b' => things.push(take_four(&mut iter)),
            _ => {},
        }
    }
}

fn main() {
    let tokens = vec!['a', '1', '2', '3', 'b', '1', '2', '3', '4', 'a', '4', '5', '6'];
    parse_tokens(&tokens);
}
Run Code Online (Sandbox Code Playgroud)

Lev*_*ans 7

for构造使用迭代器,并使用它做你想要的东西将是非常棘手的(如果不是不可能的话,我真的不确定).

但是,您可以通过切换到while let构造来轻松地工作,如下所示:

fn parse_tokens (tokens: &Vec<char>) {
    let mut iter = tokens.iter();
    let mut things: Vec<Thing> = vec![];
    while let Some(token) = iter.next() {
        match token {
            &'a' => things.push(take_three(&mut iter)),
            &'b' => things.push(take_four(&mut iter)),
            _ => {},
        }
    }
}
Run Code Online (Sandbox Code Playgroud)