Skip to content

rust中如何自定义一个自定义类的两个实例对象是否相等的逻辑 #26

Answered by jiantao88
Howard-Hu asked this question in Q&A
Discussion options

You must be logged in to vote

在 Rust 中,如果你想要为自己的类型支持 == 操作符,你需要实现 std::cmp::PartialEq trait。PartialEq trait 用于比较两个值是否相等,它有一个 eq 方法需要实现。

以下是一个例子:

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
}

在这个例子中,我们定义了一个 A 结构体,并为它实现了 PartialEq trait。在 eq 方法中,我们定义了自己的比较逻辑:如果两个 A 实例的 x 字段相等,就认为它们相等。然后在 main 函数中,我们创建了三个 A 实例并进行了比较。

注意,如果你的类型的所有字段都已经实现了 PartialEq,你可以使用 derive 属性来自动实现 PartialEq,而不需要手动实现。例如:

#[derive(PartialEq)]
struct A {
    x: i32,
}

Replies: 2 comments

Comment options

You must be logged in to vote
0 replies
Answer selected by Howard-Hu
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
3 participants