首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Peek迭代器在“loop”循环中

Peek迭代器在“loop”循环中
EN

Stack Overflow用户
提问于 2022-06-28 13:31:36
回答 2查看 181关注 0票数 2

在迭代&str时,我试图查看当前位置前面的字符。

代码语言:javascript
复制
let myStr = "12345";
let mut iter = myStr.chars().peekable();
for c in iter {
    let current: char = c;
    let next: char = *iter.peek().unwrap_or(&'∅');
}

我将把这个字符向下传递到一个方法中。然而,即使这个MRE产生了一个在移动错误后的借用,我不知道如何通过。

代码语言:javascript
复制
error[E0382]: borrow of moved value: `iter`
   --> src/lib.rs:7:27
    |
4   |     let mut iter = myStr.chars().peekable();
    |         -------- move occurs because `iter` has type `Peekable<Chars<'_>>`, which does not implement the `Copy` trait
5   |     for c in iter {
    |              ---- `iter` moved due to this implicit call to `.into_iter()`
6   |         let current: char = c;
7   |         let next: char = *iter.peek().unwrap_or(&'∅');
    |                           ^^^^^^^^^^^ value borrowed here after move
    |
note: this function takes ownership of the receiver `self`, which moves `iter`
   --> /home/james/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs:267:18
    |
267 |     fn into_iter(self) -> Self::IntoIter;

知道这是怎么回事吗?我尝试过引用和取消引用的各种组合,但我尝试过的任何东西似乎都没有效果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-28 13:36:26

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

代码语言:javascript
复制
while let Some(c) = iter.next() {
    let current: char = c;
    let next: char = *iter.peek().unwrap_or(&'∅');
}

游乐场

票数 6
EN

Stack Overflow用户

发布于 2022-06-28 18:38:39

如果您可以使用片,那么使用windows()将变得更加容易。

代码语言:javascript
复制
let slice = ['1', '2', '3', '4', '5'];
let iter = slice.windows(2);
for arr in iter {
    let current = arr[0];
    let next = arr[1];
}

游乐场

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72787359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档