查看“for”循环内的迭代器

Per*_*nce 4 rust borrow-checker

我正在尝试查看当前位置前面的字符,同时迭代&str.

\n
let myStr = "12345";\nlet mut iter = myStr.chars().peekable();\nfor c in iter {\n    let current: char = c;\n    let next: char = *iter.peek().unwrap_or(&\'\xe2\x88\x85\');\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我将把这个字符传递到一个方法中。然而,即使这个 MRE 也会产生移动后借用错误,我不知道如何克服该错误。

\n
error[E0382]: borrow of moved value: `iter`\n   --> src/lib.rs:7:27\n    |\n4   |     let mut iter = myStr.chars().peekable();\n    |         -------- move occurs because `iter` has type `Peekable<Chars<\'_>>`, which does not implement the `Copy` trait\n5   |     for c in iter {\n    |              ---- `iter` moved due to this implicit call to `.into_iter()`\n6   |         let current: char = c;\n7   |         let next: char = *iter.peek().unwrap_or(&\'\xe2\x88\x85\');\n    |                           ^^^^^^^^^^^ value borrowed here after move\n    |\nnote: this function takes ownership of the receiver `self`, which moves `iter`\n   --> /home/james/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs:267:18\n    |\n267 |     fn into_iter(self) -> Self::IntoIter;\n
Run Code Online (Sandbox Code Playgroud)\n

知道这是怎么回事吗?我尝试过引用和取消引用的各种组合,但我尝试过的似乎都不起作用。

\n

Cha*_*man 11

迭代器被移动到for循环中。您无法在循环内手动操作迭代器for。但是,for循环可以替换为while let

\n
while let Some(c) = iter.next() {\n    let current: char = c;\n    let next: char = *iter.peek().unwrap_or(&\'\xe2\x88\x85\');\n}\n
Run Code Online (Sandbox Code Playgroud)\n

游乐场

\n