==、eql?、equal?

equal? は、同一オブジェクトの場合にtrue
Object#equal?(other) は決してオーバーライドされない。これは、otherと同一オブジェクトの場合、つまりobject_idが等しい場合のみ、trueを返す。
== と eql? は、等価の場合にtrue
一方、==とeql?は、各サブクラスによってオーバーライドされる。
通常は、==とeql?はともに、等価の場合にtrueを返すが、例外としてNumericタイプでは、以下のように==とeql?は異なる。
例外としてNumericタイプでは、==とeql?は異なる
Class: Numeric

1 == 1.0          #=> true
1.eql?(1.0)       #=> false
(1.0).eql?(1.0)   #=> true