gpt4 book ai didi

rust - Rust中两个引用变量如何相等?

转载 作者:行者123 更新时间:2023-12-03 11:26:02 26 4
gpt4 key购买 nike

我有一个其中一个功能有错误的代码:

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。如果检查the docs here,则可以看到,如果类型A实现PartialEq<B>,则&'_ A实现PartialEq<&'_ B>。换句话说,如果可以比较值,则可以使用引用来比较它们。
相同的推理适用于其他比较特征:EqPartialOrdOrd,并且适用于可变引用。

关于rust - Rust中两个引用变量如何相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66042724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com