Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 между разными типами, но это в основном полезно для типов-ссылок и умных указателей.