Использование одного и того же итератора несколько раз в 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_time
s. Это возможно?