Использование одного и того же итератора несколько раз в Rust

Примечание редактора: этот пример кода взят из версии Rust до 1.0, когда реализовано много итераторов.Copy, Обновленные версии этого кода вызывают другие ошибки, но ответы по-прежнему содержат ценную информацию.

Я пытаюсь написать функцию, чтобы разбить строку на кучки букв и цифр; например,"test123test" превратится в[ "test", "123", "test" ], Вот моя попытка:

pub fn split(input: &str) -> Vec<String> {
    let mut bits: Vec<String> = vec![];
    let mut iter = input.chars().peekable();
    loop {
        match iter.peek() {
            None => return bits,
            Some(c) => if c.is_digit() {
                bits.push(iter.take_while(|c| c.is_digit()).collect());
            } else {
                bits.push(iter.take_while(|c| !c.is_digit()).collect());
            }
        }
    }
    return bits;
}

Тем не менее, это не работает, цикл навсегда. Кажется, что он использует клонiter каждый раз звонюtake_while, начиная с одной и той же позиции снова и снова. Я хотел бы использовать то же самоеiter каждый раз продвигая один и тот же итератор по всемeach_times. Это возможно?

Ответы на вопрос(2)

Ваш ответ на вопрос