【Ruby3.x】Hash::compare_by_identity?()メソッドの使い方
compare_by_identity?メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
compare_by_identity?メソッドは、レシーバであるHashオブジェクトが、そのキーを比較する際にオブジェクトの同一性(Object#object_id)を使用するかどうかを確認するために実行するメソッドです。
RubyのHashオブジェクトは通常、キーの等価性を判断するためにObject#eql?メソッドとObject#hashメソッドを使用します。この標準的な比較方法では、例えば文字列"abc"と"abc"のように、たとえメモリ上の異なるオブジェクトインスタンスであっても、内容が同じであれば同じキーとして扱われます。このモードの場合、compare_by_identity?はfalseを返します。
しかし、Hashオブジェクトに対してHash#compare_by_identityメソッドを一度呼び出すと、ハッシュはキーをObject#object_idに基づいて比較する「同一性比較モード」に切り替わります。このモードでは、たとえeql?で等しいと評価されるオブジェクトであっても、メモリ上の異なるインスタンスであれば異なるキーとして扱われるようになります。この同一性比較モードになっている場合、compare_by_identity?はtrueを返します。
このメソッドは、現在のハッシュが通常の比較モードなのか、それとも特殊な同一性比較モードになっているのかを、プログラム実行中に簡単に確認するためのものです。特に、シンボル以外の可変オブジェクトをハッシュのキーとして利用し、それらを厳密に区別したい場合や、ハッシュの挙動が期待通りでないと感じた際に、このメソッドを使って現在の比較モードを調べることができます。これにより、デバッグや、より厳密なキーの管理が求められるシステム設計の際に、ハッシュの動作を正確に把握し、問題解決や実装方針の決定に役立てることが可能です。
構文(syntax)
1h = {} 2puts h.compare_by_identity? 3 4h.compare_by_identity 5puts h.compare_by_identity?
引数(parameters)
引数なし
引数はありません
戻り値(return)
Boolean
このメソッドは、ハッシュがキーの同一性(オブジェクトID)で比較されるように設定されている場合に true を、それ以外の場合に false を返します。