我有Foo
類,並且我超載它的兩個方法==
和eql?
:哈希方法使用什麼平等?
class Foo
def initialize(bar)
@bar = bar
end
def bar
@bar
end
def ==(o)
self.bar == o.bar
end
def .eql?(o)
return ==(o)
end
end
我測試f1
和下面f2
是相對於這兩種方法等於:
u = User.find(12345)
f1 = Foo.new(u)
f2 = Foo.new(u)
f1 == f2 # => true
f1.eql?(f2) # => true
但是Hash#has_key?
並不使它們相等:
{f1 => true}.has_key?(f2) # => false
什麼是Hash#has_key?
中使用的等號方法?
您的第一個代碼塊有一些錯誤,可能是在您爲示例剪下時引入的。或者,更準確地說,我不能使用'Foo'來複制結果 –
你是對的@ neil-slater,我刪除了初始化方法和訪問器以提高可見性。 – pierallard