Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

「BasicObject#!=」は実装上、「BasicObject#==」を否定した結果を返す

「BasicObject#!=」は実装上、「BasicObject#==」を否定した結果を返します。

公式をみると、

デフォルトでは self == other を評価した後に結果を論理否定して返します。 このため、サブクラスで BasicObject#== を再定義しても != とは自動的に整合性が とれるようになっています。

つまり

def !=(other)
  !(self.equal?(ohter))
end

といった感じの実装となっているわけです。
そのため、「equal?」およびそのエイリアスの「==」を定義してあげれば、
自動的にその否定となるわけです。

コーディング規約上、否定形はunlessを使う事が推奨されています。
上のルールに従えば

something if hoge != fuga

something unless hoge == fuga

または

something unless hoge.equal?(fuga)

と書けばよい事になります。