我试图理解为什么 Rayon 的filter()
函数不需要指定正确的类型就无法工作,而filter()
如果我不使用并行迭代器则可以正常工作。这是我的代码:
use rayon::prelude::*;
fn is_even(n: i64) -> bool {
n % 2 == 0
}
fn main() {
let v: Vec<_> = (1..300_000_000)
.into_par_iter() // works correctly without this line, but not parallel
.filter(|&x| is_even(x))
.collect();
}
以下是错误消息:
error[E0271]: type mismatch resolving `<rayon::range::Iter<i32> as rayon::iter::ParallelIterator>::Item == i64`
--> src/main.rs:11:10
|
11 | .filter(|&x| is_even(x))
| ^^^^^^ expected `i32`, found `i64`
error[E0271]: type mismatch resolving `<rayon::range::Iter<i32> as rayon::iter::ParallelIterator>::Item == i64`
--> src/main.rs:12:10
|
12 | .collect();
| ^^^^^^^ expected `i32`, found `i64`
|
= note: required because of the requirements on the impl of `rayon::iter::ParallelIterator` for `rayon::iter::Filter<rayon::range::Iter<i32>, [closure@src/main.rs:11:17: 11:32]>`
filter()
如果我不使用,为什么只在不指定整数类型的情况下工作into_par_iter()
?(我知道我可以通过将范围标记为 i64 来修复它,但不是为什么它是必要的)