Pointers 在论点上,用&和*的变化来比较平等有什么区别?
我编写了以下函数:Pointers 在论点上,用&和*的变化来比较平等有什么区别?,pointers,rust,Pointers,Rust,我编写了以下函数: fn test() { let xs = [b"AAA", b"BBB"]; let buf = b"AAA"; println!("{:?}", xs.iter().find(|&x| &x == &&buf)); } 这是可行的,但我很困惑,因为这些也有效: 普林顿!{:?},xs.iter.find |&x | x==&buf; 普林顿!{:?},xs.iter.find |&x |*x==buf; 这些变化之间
fn test() {
let xs = [b"AAA", b"BBB"];
let buf = b"AAA";
println!("{:?}", xs.iter().find(|&x| &x == &&buf));
}
这是可行的,但我很困惑,因为这些也有效:
普林顿!{:?},xs.iter.find |&x | x==&buf;
普林顿!{:?},xs.iter.find |&x |*x==buf;
这些变化之间有什么区别?*和&显然与C中的行为非常不同。要理解上述内容,我需要理解这些运算符的细微差别吗?相关的差异在于相等运算符的行为。x==y和&x==&y的语义是相同的:它们比较x和y &x==&y将减摩至。PartialEq反过来具有一揽子实现
impl<'a, 'b, A, B> PartialEq<&'b B> for &'a A
where
A: PartialEq<B> + ?Sized,
B: ?Sized,
因此PartialEq::eq&&x,&&y调用PartialEq::eq*&&x,*&&y,这与PartialEq::eq&x,&y或x==y相同
fn eq(&self, other: & &'b B) -> bool {
PartialEq::eq(*self, *other)
}