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を実装することもできますが、これは主に 参照/スマートポインタ型で有用です。