Ruby equal?を使ってオブジェクトの同一性を比較する


スポンサーリンク

==演算子は、ほとんどのクラスで同値性を判断するメソッドとして定義されている。
==演算子で比較すると、別々のインスタンスでも値が同じであれば真を返す。
この値の比較のことを同性の比較という。

同じインスタンスであることを比較するには、equal?メソッドを使う。
このインスタンスの比較のことを同性の比較という。

hogeA = 'yahoo'
hogeB = 'yahoo'

if hogeA == hogeB
  puts "==  -> true"  #trueになる
else
  puts "==  -> false"
end

if hogeA.equal?(hogeB)
  puts "equal?  -> true"
else
  puts "equal?  -> false"  #falseになる
end


seisu = 30
fudo = 30.0

puts seisu == fudo  #true
puts seisu.equal?(fudo)  #false

整数と浮動小数点を==で比較するときは自動的に型変換が行われる。

ちなみに、Rubyのイコール3つ(===)は、is_a?と同じ意味で、オブジェクトがそのクラスのサブクラスのインスタンスかどうかを調べるために使う。