【Ruby3.x】Struct::eql?()メソッドの使い方
eql?メソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
eql?メソッドは、RubyのStructクラスにおいて、自身のインスタンスが持つ「値」が、比較対象の別のオブジェクトと厳密に等しいかどうかを判定するメソッドです。このメソッドは、主にハッシュテーブルのキーとしてオブジェクトを使用する際に、キーの同一性を正確に判断するために用いられます。
具体的には、eql?メソッドはまず、比較対象のオブジェクトが同じStructクラスまたはそのサブクラスのインスタンスであるかを確認します。その上で、Structが保持するすべてのメンバー(属性)の値が、対応する順序でそれぞれeql?メソッドを使って等しいかどうかを一つずつ検証します。つまり、たとえオブジェクトの参照先が異なっていても、内部に格納されているデータが完全に一致すれば真(true)を返します。
この挙動は、hashメソッドと密接に関連しています。Rubyの規約として、ある二つのオブジェクトについてeql?メソッドが真を返す場合、それらのオブジェクトのhashメソッドも同じ整数値を返さなければなりません。この原則は、ハッシュテーブルが効率的かつ正確にキーを検索し、値を格納するために不可欠です。したがって、Structのインスタンスをハッシュのキーとして利用する際には、このeql?メソッドの働きを理解しておくことが重要になります。データの同一性を厳密に比較したい場面や、コレクションの要素として利用する際に重複を避ける目的などで活用されます。
構文(syntax)
1MyStruct = Struct.new(:field1, :field2) 2instance1 = MyStruct.new("value1", 123) 3instance2 = MyStruct.new("value1", 123) 4instance1.eql?(instance2)
引数(parameters)
other
- other: 比較対象となるオブジェクト
戻り値(return)
Boolean
指定された Struct オブジェクトが、比較対象のオブジェクトと構造および内容が等しい場合に true を、そうでない場合に false を返します。