如何在Ruby中使对象示例成为散列键?

wz1wpwve  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(127)

我有一个Foo类,它有几个成员变量。当类的两个示例中的所有值都相等时,我希望对象“相等”。然后我希望这些对象成为我的哈希中的键。当我目前尝试这个时,哈希将每个示例视为不相等。

h = {}
f1 = Foo.new(a,b)
f2 = Foo.new(a,b)

字符串
此时f1和f2应该相等。

h[f1] = 7
h[f2] = 8
puts h[f1]


应打印8

q43xntqr

q43xntqr1#

参见Hash
哈希使用key.eql?来测试密钥是否相等。如果您需要使用自己的类的示例作为Hash中的键,建议您同时定义eql?hash方法。哈希方法必须具有a.eql?(b)隐含a.hash == b.hash的属性。
eql?方法很容易实现:return true如果所有成员变量都相同。对于hash方法,请使用[@data1, @data2].hash,正如Marc-Andre在评论中建议的那样。

6yoyoihd

6yoyoihd2#

在类中添加一个名为'hash'的方法:

class Foo
  def hash
    return whatever_munge_of_instance_variables_you_like
  end
end

字符串
这将按照您请求的方式工作,并且不会为不同但相同的对象生成不同的哈希键。

相关问题