为什么传递给 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 闭包谓词计算结果为真时的原始元素。因此,它不能将元素的所有权交给闭包,因此它必须通过引用传递元素。
传递给 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 闭包谓词计算结果为真时的原始元素。因此,它不能将元素的所有权交给闭包,因此它必须通过引用传递元素。