rayon :: str :: Lines <'_'>不是迭代器

时间:2019-08-08 19:50:51

标签: file-io rust rayon

我正在尝试在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);
}

我缺少特征定义吗?我该如何解决该错误?

1 个答案:

答案 0 :(得分:1)

不能将并行迭代器与(非并行)for循环一起使用。

相反,请在并行迭代器上使用.for_each(|| …)回调。

或者,先调用.collect::<Vec<_>>(),然后再调用非并行for

对于更高级的情况,您还可以将结果并行发送到channel,然后使用非并行for从通道中读取。