[英]How can two reference variables be equal in Rust?
我的代码在其中一个功能中有错误:
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
}
但是,我也尝试(随机)使用借用方法,令我惊讶的是,它奏效了。
fn is_five(x: &i32) -> bool {
x == &5
}
我不明白两个地址怎么可能相同? ==
运算符是否具有某些特性可以获取存储在两端的值?
为了能够做到==
,必须实现PartialEq
。 如果您查看此处的文档,您可以看到如果类型A
实现PartialEq<B>
则&'_ A
实现PartialEq<&'_ B>
。 换句话说,如果您可以比较值,则可以使用引用进行比较。
相同的推理适用于其他比较特征: Eq
、 PartialOrd
和Ord
,以及可变引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.