Реализация «осторожного» take_ while с использованием Peekable
Я хотел бы использоватьPeekable
как основа для новогоcautious_take_while
операция, которая действует какtake_while
отIteratorExt
но не потребляя первый неисправный предмет. (Есть дополнительный вопрос о том, является ли это хорошей идеей, и есть ли лучшие способы достичь этой цели в Rust - я был бы рад за подсказки в этом направлении, но в основном я пытаюсь понять, где мой код ломки).
API, который я пытаюсь включить, в основном:
let mut chars = "abcdefg.".chars().peekable();
let abc : String = chars.by_ref().cautious_take_while(|&x| x != 'd');
let defg : String = chars.by_ref().cautious_take_while(|&x| x != '.');
// yielding (abc = "abc", defg = "defg")
Я взломалсоздавая MCVE здесь, но я получаю:
: 10: 5: 10:19 ошибка: невозможно удалить из заимствованного содержимого: 10 chars.by_ref (). Cautious_take_ while (| & x | x! = '.');
Насколько я могу судить, я следую той же схеме, что и у Руста.TakeWhile
с точки зрения сигнатур моей функции, но я вижу другое поведение, отличное от проверки заимствования. Может кто-то указать, что я делаю не так?