【Ruby3.x】Hash::compare_by_identity()メソッドの使い方
compare_by_identityメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
compare_by_identityメソッドは、RubyのHashオブジェクトがキーを比較する方法を変更するメソッドです。
通常、Hashはキーの値が等しいかどうかを基準に、キーを同じものとみなします。例えば、内容が同じ二つの異なる文字列オブジェクトは、通常、同じキーとして扱われるため、後から追加された値で既存の値が上書きされてしまいます。
このメソッドを呼び出すと、そのHashインスタンスは、キーの値が同じかどうかではなく、キーとして使用されたオブジェクトがメモリ上で全く同じものであるか(つまり、全く同じオブジェクトであるか)によってキーを判断するようになります。
これにより、たとえ値が完全に一致していても、それらが異なるオブジェクトであれば、Hashはそれらを別々のキーとして扱います。例えば、内容が「hello」という二つの異なる文字列インスタンスをキーとして設定した場合、このメソッドを適用していれば両方のキーと値のペアを独立して保持することができます。
この機能は、特に文字列をキーとして使用する際に、内容ではなくオブジェクトのインスタンスそのものを区別したい場合に非常に有用です。
一度このメソッドで比較モードを設定すると、そのHashインスタンスは以降、常にオブジェクトの同一性によってキーを比較し続けます。このメソッドは、設定を変更したHash自身を戻り値として返します。
構文(syntax)
1h = {} 2h.compare_by_identity 3key1 = "hello" 4key2 = "hello".dup 5 6h[key1] = 1 7h[key2] = 2 8 9p h
引数(parameters)
引数なし
引数はありません
戻り値(return)
Hash
このメソッドは、レシーバであるハッシュ自身を返します。