在 Rust 语言手册中有一个调用迭代器的
闭包的参数为什么是一个引用
我知道使用引用
filter()
函数的示例: Rust Book 。for i in (1..100).filter(|&x| x % 2 == 0) {
println!("{}", i);
}
下面有一段解释,但我很难理解:
这将打印出1到100之间的所有偶数。(请注意,由于filter不会消耗正在迭代的元素,因此它会传递对每个元素的引用,因此过滤谓词使用&x模式来提取整数本身。)
然而,这并不起作用:
for i in (1..100).filter(|&x| *x % 2 == 0) {
println!("i={}", i);
}
闭包的参数为什么是一个引用
|&x|
,而不是 |x|
?使用 |&x|
和 |x|
有什么区别?我知道使用引用
|&x|
更高效,但我对于不需要使用 *x
对指针 x
进行解引用感到困惑。
let &x = my_pointer
实际上是let x = *my_pointer
的另一种写法,而且它也适用于函数参数声明吗?如果是这样的话,为什么使用|x|
不会抛出错误?根据我在 C 中的经验,我希望在这里收到一个指针。或者 Rust 在这里隐式地在堆栈上分配了原始x
值的副本吗? - jeremija