rust - 参考参考 rust
问题描述
fn count_occur(v: &Vec<i32>, val: i32) -> usize {
v.into_iter().filter(|&&x| x == val).count()
}
fn main() -> () {
let v1 : Vec<i32> = vec![1,2,3, 4,5,6];
for &item in &v1 {
count_occur(&v1, item);
}
}
有人可以解释一下为什么lambda
需要采取&&x
(我的意思是为什么需要双重引用 - 我看不出为什么传递给 lambda 的元素是对引用的引用)
解决方案
&'a Vec 的 IntoIterator 实现正在返回&T
.
filter
的谓词定义为where P: FnMut(&I::Item) -> bool
。它引用迭代器的项目,因此是双重引用。