面试题答案
一键面试引用的比较规则
在Rust中,引用本身的比较是按内存地址进行比较的。要比较引用所指向的内容,需要满足该内容实现了 PartialEq
或 Eq
特征。
比较结构体引用所指向内容的相等性
对于 Point
结构体,Rust默认不会为其实现比较相关的特征。如果要比较两个 &Point
引用所指向内容的相等性,需要为 Point
结构体实现 PartialEq
特征。
示例代码
#[derive(PartialEq)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let p1 = Point { x: 1, y: 2 };
let p2 = Point { x: 1, y: 2 };
let ref1 = &p1;
let ref2 = &p2;
if ref1 == ref2 {
println!("The points are equal");
} else {
println!("The points are not equal");
}
}
在上述代码中:
- 使用
#[derive(PartialEq)]
为Point
结构体自动派生PartialEq
特征,这样就可以比较Point
结构体实例的相等性。 - 创建两个
Point
实例p1
和p2
,并分别创建它们的引用ref1
和ref2
。 - 使用
==
运算符比较ref1
和ref2
所指向内容的相等性。因为Point
实现了PartialEq
,所以可以进行这样的比较。