Rust迭代双字符串时while let多绑定报错的解决方法
修复Rust并行迭代字符串的错误
你遇到的错误是因为while let中用&&连接两个let Some的写法是Rust尚未稳定的语法,目前无法直接使用。有两种更简洁且符合稳定Rust规范的写法:
方法一:使用loop+match手动处理迭代器结果
通过循环内匹配两个迭代器的next()结果,仅当两者都有值时执行逻辑,否则退出循环:
fn main() { let s1 = String::from("abacde"); let s2 = String::from("123456"); let mut iter1 = s1.chars(); let mut iter2 = s2.chars(); loop { match (iter1.next(), iter2.next()) { (Some(ch1), Some(ch2)) => { println!("ch1: {:?}, ch2: {:?}", ch1, ch2); } // 任意一个迭代器耗尽就退出循环 _ => break, } } }
方法二:使用zip方法(推荐)
Rust的迭代器提供了zip方法,专门用于将两个迭代器合并为一个元组迭代器,当其中任意一个迭代器耗尽时自动停止,这是处理并行迭代最简洁的方式:
fn main() { let s1 = String::from("abacde"); let s2 = String::from("123456"); for (ch1, ch2) in s1.chars().zip(s2.chars()) { println!("ch1: {:?}, ch2: {:?}", ch1, ch2); } }
两种方法都能避免使用索引带来的效率问题,且符合Rust的稳定语法规范,其中zip方法更符合Rust的迭代器设计哲学,代码更简洁易读。
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

