我正在尝试在Rust中逐行处理文件,并使用人造丝对此进行并行化。它抱怨以下内容
rayon::str::Lines<'_>` is not an iterator
= help: the trait `std::iter::Iterator` is not implemented for
= note: required by `std::iter::IntoIterator::into_iter`
这是到目前为止的代码
use rayon::prelude::*;
use std::fs;
fn main() {
let file_content = match fs::read_to_string("input.txt") {
Ok(s) => s,
Err(e) => {
eprintln!("Error: {}", e);
std::process::exit(1);
}
};
file_content = 5;
for line in file_content.par_lines() {
println!("{}", line);
}
std::process::exit(0);
}
我缺少特征定义吗?我该如何解决该错误?
答案 0 :(得分:1)
不能将并行迭代器与(非并行)for
循环一起使用。
相反,请在并行迭代器上使用.for_each(|| …)
回调。
或者,先调用.collect::<Vec<_>>()
,然后再调用非并行for
。
对于更高级的情况,您还可以将结果并行发送到channel,然后使用非并行for
从通道中读取。