gpt4 book ai didi

ruby - 哈希方法使用什么相等性?

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:33 26 4
gpt4 key购买 nike

我有类 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

我测试下面的 f1f2 就两种方法而言是相等的:

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?中使用的相等方法是什么?

最佳答案

哈希类型的大多数实现,包括 Ruby,首先依赖于哈希(为了速度!)然后进行相等性检查。要验证它是否有效,首先,您可以添加

def hash
1
end

之后,您应该努力为 hash 提供尽可能多的不同返回值,如果对象被认为是相等的(当然,只要速度快),这些返回值仍然相等。

p>

关于ruby - 哈希方法使用什么相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21758968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com