You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust for循环内使用Peekable迭代器报移动后借用错误如何解决

报错原因

for循环遍历迭代器时,会隐式调用迭代器的into_iter()方法,该方法会获取迭代器的所有权,将iter移动到for循环的内部逻辑中。此时循环体外部定义的iter变量已经失效,你在循环体内尝试调用iter.peek(),本质是在借用一个已经被移动走的值,因此触发E0382编译错误。

修复方案

改用while let循环手动驱动迭代器,全程持有迭代器的可变所有权,即可正常调用peek()预览下一个字符,代码如下:

let my_str = "12345";
let mut iter = my_str.chars().peekable();
while let Some(current) = iter.next() {
    let next = iter.peek().copied().unwrap_or('∅');
    // 此处可将current、next传入其他业务方法
}

实现说明

  • iter.next()负责手动推进迭代流程,迭代器的所有权始终绑定在当前作用域的iter变量上,不会被转移
  • peek()返回值类型为Option<&char>,由于char实现了Copy特征,调用copied()可以无开销地拿到Option<char>类型,无需手动解引用
  • 迭代到最后一个字符时,peek()会返回None,通过unwrap_or fallback到预设的空标识字符'∅'即可

内容的提问来源于stack exchange,提问作者ScottishTapWater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:01:13