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

eii*_*000 2 closures iterator reference ownership rust

传递给的闭包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);
}
Run Code Online (Sandbox Code Playgroud)

kfe*_*v91 7

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

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

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