3
我有一些很难理解在这个例子中的区别:为什么ITER()要求及对lambda函数,而范围在这个例子不
我认为两者range(..)
和iter()
是std::iter::Iterator
那么,为什么我在第一个示例中将|x|
传递给map
和filter
,但必须在第二个示例中将其作为|&x|
传递给它?
use std::iter::AdditiveIterator;
fn main() {
let range1 = range(1,9);
let range2 = [1,2,3,4,5,6,7,8,9];
//indented for easier visualization
let sum1 = range1 .map(| x| x * x).filter(| x| x % 2 == 0).sum();
let sum2 = range2.iter().map(|&x| x * x).filter(|&x| x % 2 == 0).sum();
println!("{}", sum1);
println!("{}", sum2);
}
'filter'调用中不应该有'&':'map'部分之后,你正在处理'int'而不是'&int'。 –
@ChrisMorgan,no,'filter'接收对项目的引用,而不是项目本身。 – huon