gpt4 book ai didi

ruby - 如何使对象实例成为 Ruby 中的哈希键?

转载 作者:数据小太阳 更新时间:2023-10-29 06:24:53 24 4
gpt4 key购买 nike

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

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

此时 f1 和 f2 应该相等。

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

应该打印 8

最佳答案

参见 http://ruby-doc.org/core/classes/Hash.html

Hash uses key.eql? to test keys for equality. If you need to use instances of your own classes as keys in a Hash, it is recommended that you define both the eql? and hash methods. The hash method must have the property that a.eql?(b) implies a.hash == b.hash.

eql?方法很容易实现:如果所有成员变量都相同,则返回 true。对于哈希方法,使用 [@data1, @data2].hash,正如 Marc-Andre 在评论中所建议的那样。

关于ruby - 如何使对象实例成为 Ruby 中的哈希键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2328685/

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