Per*_*nce 4 rust borrow-checker
我正在尝试查看当前位置前面的字符,同时迭代&str.
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}\nRun Code Online (Sandbox Code Playgroud)\n我将把这个字符传递到一个方法中。然而,即使这个 MRE 也会产生移动后借用错误,我不知道如何克服该错误。
\nerror[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;\nRun Code Online (Sandbox Code Playgroud)\n知道这是怎么回事吗?我尝试过引用和取消引用的各种组合,但我尝试过的似乎都不起作用。
\nCha*_*man 11
迭代器被移动到for循环中。您无法在循环内手动操作迭代器for。但是,for循环可以替换为while let:
while let Some(c) = iter.next() {\n let current: char = c;\n let next: char = *iter.peek().unwrap_or(&\'\xe2\x88\x85\');\n}\nRun Code Online (Sandbox Code Playgroud)\n游乐场。
\n