【Ruby3.x】Method::eql?()メソッドの使い方
eql?メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
eql?メソッドは、RubyのMethodオブジェクトが、互いに「等しい」と見なせるかどうかを判定するメソッドです。このメソッドは、2つのMethodオブジェクトを厳密に比較し、その結果を真偽値で返します。
具体的には、eql?メソッドは以下の条件をすべて満たす場合にtrueを返します。一つでも条件が満たされない場合はfalseを返します。
まず、比較対象のオブジェクトが両方ともMethodクラスのインスタンスである必要があります。次に、それらのMethodオブジェクトが参照している基盤となるメソッドが、同じクラスやモジュールで定義された同じ名前のメソッドである必要があります。さらに、それらのMethodオブジェクトが、同じレシーバオブジェクト(メソッドが呼び出される対象のインスタンス)にバインドされている必要があります。
このメソッドは、単にオブジェクトのIDが同じかを見るequal?とは異なり、オブジェクトが持つ意味的な等価性を評価します。例えば、同じコードから生成されたように見える異なるMethodオブジェクトでも、レシーバが異なればeql?はfalseを返します。
主に、Methodオブジェクトをハッシュのキーとして使用する場合など、正確な等価性判定が必要な場面で利用されます。これにより、ハッシュ内で重複することなくMethodオブジェクトを管理できるようになります。
構文(syntax)
11.eql?(1.0)
引数(parameters)
req
- obj: 比較対象のオブジェクト
戻り値(return)
true or false
指定されたメソッド eql? は、レシーバであるメソッドオブジェクトと、引数として渡されたオブジェクトが、メソッドの内容、バインディング、そして必要であれば所有者も含めて完全に等しい場合に true を返します。それ以外の場合は false を返します。