PartialEq と Eq

部分的等価性と完全な等価性。

導出可能: ✅

// 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 を実装している場合、その型で ==/!= 演算子を使用できます。

  • 型は PartialEq を実装せずに Eq を実装することはできません。

  • 補足: Partial は「この関数に対して、この集合には妥当でない要素が存在する」 ことを意味します。

    これは、等価性の判定が panic することや、何らかの結果を返すことを意味する のではなく、単に、等価性が期待どおりに振る舞わない値が存在しうるということ です。

    たとえば浮動小数点値では、NaN は例外的な存在です。ビット単位では等しいにも かかわらず、NaN == NaN は false です。

    PartialEq は、f32/f64 のような型を、完全な等価性を持つ型と区別する ために存在します。

  • 異なる型の間で PartialEq を実装することもできますが、これは主に 参照/スマートポインタ型で有用です。