shou.com
JP / EN

Ruby試験によくでるeql?とequal?の覚え方

Sun May 13, 2018
Sun May 13, 2018

Ruby Sliver試験によくでるeql?、equal?の覚え方をメモしておきます。

試験問題にはよくこんな感じで出題されます。

[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書より

問題)

以下のコードを実行すると何が表示されますか?

1
2
3
4
5
6
a = "abc"
b = "abc"

print a.eql? b
print a.equal? b
print a == b

答え)

  • truefalsetrue

教科書的な回答をするなら、

eql?メソッドは、ハッシュの内部で「同じキーかどうか」を調べるために使われるメソッドです。レシーバobjが引数other_objと同じかどうかを調べ、同じならtrue、違えばfalseを返します。 オブジェクトを比較したいときは、普通はeql?メソッドを使わずに、「オブジェクトの内容が同じかどうか」を調べるには==メソッドを、「同じオブジェクトかどうか」を調べるにはequal?メソッドを使ってください。 Objectクラスのeql?メソッドは、同じオブジェクトかどうかを調べるだけのもので、equal?メソッドと同じです。StringやArrayなどのeql?メソッドは上書きされて、「内容が同じかどうか」を調べるものになっています。 Rubyリファレンスより

です。

ですが、これではたまに忘れることがあるので僕は、こう覚えています。

eql?だいたい等しいか調べるから文字数が短い。

equal?はちゃんと調べるから文字数が長い。

See Also