eql?
私はルビーとルビーの違いについて読んでいますが、値とタイプを比較しながら値を比較==
することを理解しています==
eql?
ルビーのドキュメントによると:
クラスObjectのオブジェクトの場合、eql?==と同義です。サブクラスは通常この伝統を引き継いでいますが、例外があります。
ドキュメントで指定されている動作が自動的に継承されるようには見えませんが、これはこれらのメソッドを実装する方法の提案にすぎません。==
これは、どちらかをオーバーライドする場合、または両方をオーバーライドする必要があることも意味しますかeql?
?
以下のクラスPerson
では、これはオーバーライドの典型的な方法でeql?
あり==
、制限の少ないもの==
がより制限のあるものに委任するだけです(タイプではなく値を比較するためだけに実装された場合、委任するのeql?
は逆に思えます)。eql?
==
==
class Person
def initialize(name)
@name = name
end
def eql?(other)
other.instance_of?(self.class) && @name == other.name
end
def ==(other)
self.eql?(other)
end
protected
attr_reader :name
end