Ruby Sliver試験によくでるeql?、equal?の覚え方をメモしておきます。
試験問題にはよくこんな感じで出題されます。
問題)
以下のコードを実行すると何が表示されますか?
a = "abc"
b = "abc"
print a.eql? b
print a.equal? b
print a == b
答え)
教科書的な回答をするなら、
eql?メソッドは、ハッシュの内部で「同じキーかどうか」を調べるために使われるメソッドです。レシーバobjが引数other_objと同じかどうかを調べ、同じならtrue、違えばfalseを返します。 オブジェクトを比較したいときは、普通はeql?メソッドを使わずに、「オブジェクトの内容が同じかどうか」を調べるには==メソッドを、「同じオブジェクトかどうか」を調べるにはequal?メソッドを使ってください。 Objectクラスのeql?メソッドは、同じオブジェクトかどうかを調べるだけのもので、equal?メソッドと同じです。StringやArrayなどのeql?メソッドは上書きされて、「内容が同じかどうか」を調べるものになっています。 Rubyリファレンスより
です。
ですが、これではたまに忘れることがあるので僕は、こう覚えています。
eql?だいたい等しいか調べるから文字数が短い。
equal?はちゃんと調べるから文字数が長い。