use std::iter::Peekable;
pub trait AdvanceWhile<I: Iterator> {
fn advance_while<P>(&mut self, predicate: P)
where
P: Fn(&I::Item) -> bool;
}
impl<I: Iterator> AdvanceWhile<I> for Peekable<I> {
fn advance_while<P>(&mut self, predicate: P)
where
P: Fn(&I::Item) -> bool,
{
while let Some(val) = self.peek() {
if predicate(val) {
self.next();
} else {
break;
}
}
}
}
PlaygroundPeekable :: peekの結果に基づいてPeekable :: nextを呼び出すにはどうすればよいですか?
エラー:字句借入の
error[E0499]: cannot borrow `*self` as mutable more than once at a time
--> src/main.rs:16:17
|
14 | while let Some(val) = self.peek() {
| ---- first mutable borrow occurs here
15 | if predicate(val) {
16 | self.next();
| ^^^^ second mutable borrow occurs here
...
20 | }
| - first borrow ends here
この[にクロス投稿されましたユーザーフォーラム](https://users.rust-lang.org/t/how-do-i-work-with-the-borrow-checker-in-this-case/6005?u=shepmaster)を参照してください。 – Shepmaster