gpt4 book ai didi

ruby - 在 Ruby 中制作对象散列的最佳方法?

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:25 25 4
gpt4 key购买 nike

所以我有一个类,其中我需要覆盖相等运算符。这并不难。但是自定义相等运算符不会被使用,除非 my_obj.hash 对于被比较的两个对象是相等的。所以我们需要覆盖 hash()

我有点卡在执行此操作的最佳方法上。我的对象嵌入了三个其他对象实例。我通过示例看到,对于简单的实例变量,您可以只对变量本身进行哈希处理:

[var1, var2, var3].hash

更具体地说,我的类具有三个嵌入式对象的实例变量,我们称它们为:

一个B1B2

我的对象的两个实例相等,如果

object1.B1 == object2.B1 && object1.B2 == object2.B2 || 
object1.B1 == object2.B2 && object1.B2 == object2.B1

换句话说,B1 和 B2 的集合中有相同的两个对象,无论它们分配给哪个特定变量。

B1 和 B2 也有自定义的平等机制。

我只是不清楚在这里覆盖 hash() 的最佳策略。

抱歉,如果这个例子是抽象的,我尽量避免发布大量代码。

最佳答案

尝试使用 Set 而不是数组,这样顺序就无关紧要了。你必须在顶部有这一行:

require 'set'

然后制作一个包含这两个对象的集合,并用它来帮助实现相等运算符和散列方法。我假设 Set#hash 行为正确,您可以在哈希方法中使用它。 Set#== 可用于简化相等运算符。

http://www.ruby-doc.org/stdlib-2.1.4/libdoc/set/rdoc/Set.html

关于ruby - 在 Ruby 中制作对象散列的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26694760/

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