繁体   English   中英

Rust 中的两个参考变量如何相等?

[英]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> 换句话说,如果您可以比较值,则可以使用引用进行比较。

相同的推理适用于其他比较特征: EqPartialOrdOrd ,以及可变引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM