Rust 两个参考变量怎么可能相等?
我有一个代码,其中一个函数中有一个bug:Rust 两个参考变量怎么可能相等?,rust,Rust,我有一个代码,其中一个函数中有一个bug: fn is_five(x: &i32) -> bool { x == 5 } fn main() { assert!(is_five(&5)); assert!(!is_five(&6)); println!("Success!"); } 运行时,错误为: error[E0277]: can't compare `&i32` with `{integer}`
fn is_five(x: &i32) -> bool {
x == 5
}
fn main() {
assert!(is_five(&5));
assert!(!is_five(&6));
println!("Success!");
}
运行时,错误为:
error[E0277]: can't compare `&i32` with `{integer}`
--> main.rs:2:7
|
2 | x == 5
| ^^ no implementation for `&i32 == {integer}`
|
= help: the trait `std::cmp::PartialEq<{integer}>` is not implemented for `&i32`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.
然而,我也尝试(随机)使用借用方法,令我惊讶的是,它奏效了
fn is_five(x: &i32) -> bool {
x == &5
}
我不明白两个地址怎么可能相同?是不是
=
运算符具有某种特性,可以将值存储在两端?为了能够执行=
,必须实现PartialEq
。如果您检查,您会发现如果类型a
实现PartialEq
,那么&“a
实现PartialEq”如果您可以比较值,那么您可以比较它们的指针”有点误导,因为在编写x=&5
时,并不是要比较的指针,这是它们指向的值。@user4815162342是的,你是对的。我会更清楚地写“如果你可以比较值,你可以使用指向它们的指针来比较它们”。也就是说,定义值之间的偏序关系意味着指向该值的指针上的偏序关系,这并不是错误的。感谢您的澄清。请注意,您不是在比较指针,而是在比较引用@谢谢你的更正。对于其他发现区别不明确的用户,这里有一些更多的信息:您可以使用来比较指针而不是值,以防万一您需要它。
fn is_five(x: &i32) -> bool {
x == &5
}