5

==ルビークラスに実装したい。できます

def ==(o)
  o.respond_to?(:id) && self.id == o.id
end

また

def ==(o)
  o.is_a?(Foo) && self.id == o.id
end

この記事によると、前者の方が理にかなっているようです。私が実装している場合eql?は、後者を実行します。これは正しいです?

4

1 に答える 1

1

任意のオブジェクトと比較するのか、特定のタイプのオブジェクトと比較するのかによって異なります。2番目の形式は特定のものであり、最初のジェネリックです。

あなたの場合、あなたはおそらく特定のフォームで大丈夫です。一般的な比較は、比較しているオブジェクトが一致するものとして変換または解釈できる場合にのみ関係します。使用idはあまりにもオープンエンドのようです。これは、Foo10とBar10が完全に異なるソースから取得される可能性がある場合、それらが同等であることを意味します。

于 2012-05-22T18:56:38.827 に答える