我有一个实现的结构,Iterator
它可以作为迭代器正常工作。它产生值,并使用.map()
,我从本地 HTTP 服务器下载每个项目并保存结果。我现在想并行化这个操作,Rayon看起来很友好。
尝试按照文档中的示例进行操作时出现编译器错误。
这是按顺序工作的代码。generate_values
返回实现的结构Iterator
。dl
下载值并保存它们(即它有副作用)。由于迭代器在 Rust 中是惰性的,所以我.count()
在末尾放了 a 以便它实际运行它。
generate_values(14).map(|x| { dl(x, &path, &upstream_url); }).count();
在人造丝示例之后,我尝试了这个:
generate_values(14).par_iter().map(|x| { dl(x, &path, &upstream_url); }).count();
并得到以下错误:
src/main.rs:69:27: 69:37 error: no method named `par_iter` found for type `MyIterator` in the current scope
有趣的是,当我使用.iter()
许多 Rust 东西使用的 时,我得到了一个类似的错误:
src/main.rs:69:27: 69:33 error: no method named `iter` found for type `MyIterator` in the current scope
src/main.rs:69 generate_values(14).iter().map(|tile| { dl_tile(tile, &tc_path, &upstream_url); }).count();
既然我实施了Iterator
,我应该.iter()
免费获得吧?这是为什么.par_iter()
不起作用?
Rust 1.6 和 Rayon 0.3.1
$ rustc --version
rustc 1.6.0 (c30b771ad 2016-01-19)