为什么传递给 map() 的闭包不采用引用,而传递给 filter() 的闭包采用引用?

Why the closure passed to map() does not take a reference while the one passed to filter() takes a reference?

传递给 map() 的闭包不接受引用,而传递给 filter() 的闭包在 Rust 中接受引用。大多数迭代器适配器都采用引用。为什么 map() 没有在 Rust 中引用?

let a = (0..3).map(|x| x*2);
for i in a {
    println!("map i = {}", i);
}

let a = (0..3).filter(|&x| x % 2 == 0);
for i in a {
    println!("filter i = {}", i);
}

.map(<closure>).filter(<closure>) 有不同的用途。

.map(<closure>) 将迭代器元素的所有权赋予闭包,以便它们可以转换为新元素,然后由闭包返回。

但是,.filter(<closure>) returns 闭包谓词计算结果为真时的原始元素。因此,它不能将元素的所有权交给闭包,因此它必须通过引用传递元素。