-
比如我创建了一个新类A,有两个A的实例a1,a2;我想自定义a1==a2的逻辑;希望可以给一个可以直接运行的示例代码! |
Beta Was this translation helpful? Give feedback.
Answered by
jiantao88
Jun 30, 2023
Replies: 2 comments
-
在 Rust 中,如果你想要为自己的类型支持 以下是一个例子: struct A {
x: i32,
}
impl PartialEq for A {
fn eq(&self, other: &Self) -> bool {
// 自定义逻辑:如果 x 字段相等,就认为两个 A 实例相等
self.x == other.x
}
}
fn main() {
let a1 = A { x: 1 };
let a2 = A { x: 2 };
let a3 = A { x: 1 };
println!("{}", a1 == a2); // 输出:false
println!("{}", a1 == a3); // 输出:true
} 在这个例子中,我们定义了一个 注意,如果你的类型的所有字段都已经实现了 #[derive(PartialEq)]
struct A {
x: i32,
} 这会生成和上面一样的代码,即比较 |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
Howard-Hu
-
pub struct Person {
pub id: u32,
pub name: String,
pub height: f64,
}
impl PartialEq for Person {
fn eq(&self, other: &Self) -> bool {
self.id == other.id
}
}
fn main() {
let p1 = Person {
id: 0,
name: "John".to_string(),
height: 1.2,
};
let p2 = Person {
id: 0,
name: "Jack".to_string(),
height: 1.4,
};
println!("p1 == p2 = {}", p1 == p2); // p1 == p2 = true
} |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
在 Rust 中,如果你想要为自己的类型支持
==
操作符,你需要实现std::cmp::PartialEq
trait。PartialEq
trait 用于比较两个值是否相等,它有一个eq
方法需要实现。以下是一个例子:
在这个例子中,我们定义了一个
A
结构体,并为它实现了PartialEq
trait。在eq
方法中,我们定义了自己的比较逻辑:如果两个A
实例的x
字段相等,就认为它们相等。然后在main
函数中,我们创建了三个A
实例并进行了比较。注意,如果你的类型的所有字段都已经实现了
PartialEq
,你可以使用derive
属性来自动实现PartialEq
,而不需要手动实现。例如:…