PartialEq и Eq
Частичное равенство и полное равенство.
Можно получить через derive: ✅
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
#[derive(PartialEq, Eq)]
pub struct User { name: String, favorite_number: i32 }
fn main() {
let alice = User { name: "alice".to_string(), favorite_number: 1_000_042 };
let bob = User { name: "bob".to_string(), favorite_number: 42 };
dbg!(alice == alice);
dbg!(alice == bob);
}
-
Методы, связанные с равенством. Если тип реализует
PartialEq, то с этим типом можно использовать оператор==/!=. -
Тип не может реализовать
Eqбез реализацииPartialEq. -
Напоминание: «partial» означает, что для этой функции в множестве есть недопустимые члены.
Это не значит, что равенство вызовет панику или вернёт результат, только что могут быть значения, которые ведут себя не так, как вы ожидаете от равенства.
Например, для значений с плавающей запятой
NaN— исключение:NaN == NaNложно, несмотря на побитовое равенство.PartialEqсуществует, чтобы отделить такие типы, какf32/f64, от типов с полным равенством. -
Можно реализовать
PartialEqмежду разными типами, но это в основном полезно для типов-ссылок и умных указателей.