fn main(){
let a = 1;
println!("{:p}",&a);
println!("{:p}",&&a);
println!("{:p}",&&a);
}
/*
0x7ffe58e66c0c
0x7ffe58e66ca0
0x7ffe58e66cf0
*/
&a 还能理解,打印的其实就是 a所在内存单元的地址
&&a 他是不是分配了一个临时的空间,来存放&a,然后再去获得存放&a的内存单元的地址
因为两次打印出来的是不一样的地址
如果有一个 b=&a ,打印&b,好像更好理解一点

之所以想到这个问题,是因为在做 rustlings iterators5 的题目的时候
fn count_iterator(map: &HashMap<String, Progress>, value: Progress) -> usize {
// map is a hashmap with String keys and Progress values.
// map = { "variables1": Complete, "from_str": None, ... }
//todo!();
// &Progress &&Progress
map.values().filter(|x| x == &&value).count()
}
这里的filter 里面的 closure函数,怎么去对比
values() 得到的是一个迭代器,每一个可迭代的item是一个 &'a V 类型
然后 filter 函数里面接受的
fn filter<P>(self, predicate: P) -> Filter<Self, P>
where
Self: Sized,
P: FnMut(&Self::Item) -> bool,
这个P是的参数是&Self::Item , 所以导致了我上面写的 |x|中的x是 &&Progress 类型
但是 x==&&value 这样比,rustlings是通过了,可回到上面的 &&a的例子,他每次又打印出不一样,我又有点疑惑
x==&&value 和 **x==value 哪个更好?
1
共 1 条评论, 1 页
评论区
写评论前一段在项目里脑抽没注意自己写了&&,找了半天为什么值没传过来(&&打印出的地址竟然高概率一样)……