在Rust编程语言中,为了重载操作符,我们需要实现相应的trait(特征)。比如为了使用比较运算符<、<=、>和>=,你需要实现PartialOrd
特征。如果你希望使用加号+
,则需要实现std::ops::Add
特征。本文将详细讨论Eq
和PartialEq
特征,这两个特征分别用于实现==
和!=
操作符,我们将深入探讨它们的区别,并提供实用的示例。
何为Eq和PartialEq?
Rust中的Eq
和PartialEq
是用于比较操作的两个核心trait。如果你的类型需要支持相等性比较(即可以使用==
和!=
操作符进行比较),它们必须实现这两个trait中的至少一个。 这两者之间的主要区别在于"偏序性"(Partial
)和"全序性"(Full
)。PartialEq
允许类型的部分值相互比较,而Eq
要求类型的所有值在比较时都是确定的。
PartialEq的实现
首先,让我们来看一个PartialEq
的例子:
enum BookFormat { Paperback, Hardback, Ebook }
struct Book {
isbn: i32,
format: BookFormat,
}
impl PartialEq for Book {
fn eq(&