【Ruby3.x】Proc::eql?()メソッドの使い方
eql?メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
eql?メソッドは、レシーバーであるProcオブジェクトと、引数として渡された別のProcオブジェクトが「等しい」と見なせるかどうかを厳密に比較するメソッドです。
このメソッドは、以下のいずれかの条件を満たす場合にtrueを返します。
一つ目の条件は、二つのProcオブジェクトがメモリ上で全く同じオブジェクトである(オブジェクトの識別番号が同じである)場合です。
二つ目の条件は、異なるオブジェクトであっても、両方のProcオブジェクトが「同じソースコード」から、「同じコンテキスト(文脈)」で生成されたものである場合です。
ここで言う「同じソースコード」とは、Procオブジェクトを生成したブロックの中身、つまり実行される処理内容が完全に一致することを指します。例えば、変数名が異なっても、{|x| x * 2}と{|y| y * 2}のように処理が同じであれば「同じソースコード」と見なされます。
「同じコンテキスト」とは、それらのProcオブジェクトが定義されたプログラム上の環境が同一であることを意味します。具体的には、同じファイル、同じメソッド、または同じクラスの定義内でProcが作成された場合などが該当します。
これらの条件のどちらも満たさない場合はfalseを返します。
Rubyにおいて、Procオブジェクトのeql?メソッドは、通常、==演算子と同じ振る舞いをします。eql?は特にハッシュのキーとしてオブジェクトを使用する際に、より厳密な同値性を判定するために用いられることが多いですが、Procにおいては==と同様に、コードとコンテキストを基にした同値性を判定する役割を持ちます。
構文(syntax)
1Proc.new {}.eql?(Proc.new {})
引数(parameters)
other
- other: 比較対象となるProcオブジェクト
戻り値(return)
Boolean
Procオブジェクトが、レシーバーであるProcオブジェクトと引数として渡されたProcオブジェクトが、全く同じオブジェクトである場合に true を、それ以外の場合に false を返します。