如何在 Ruby 中使对象实例成为哈希键?

2024-01-09

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

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

此时 f1 和 f2 应相等。

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

应该打印 8


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

哈希用途key.eql?测试按键 平等。如果您需要使用实例 你自己的类作为键Hash, 建议您定义两者 这eql? and hash方法。哈希值 方法必须具有以下属性a.eql?(b)暗示a.hash == b.hash.

The eql?方法很容易实现:return true如果所有成员变量都相同。为了hash方法、用途[@data1, @data2].hash正如马克-安德烈在评论中建议的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ruby 中使对象实例成为哈希键? 的相关文章

随机推荐

  • 使用 C 中的位掩码和位运算符检查字符是否为 ASCII

    我需要编写程序来检查标准输入中的每个单独的字符 看看它是否是 ASCII 字符 我知道它需要检查的是第 8 位 代码中的第 7 位 如果我没记错的话 是否为 0 因为 ASCII 只使用 7 位 但我很难弄清楚如何准确地让它检查具体位 这就
  • git-diff 中有类似 diff --show-c-function 的东西吗?

    我一直在处理 git 存储库中的一个文件 如果我有该文件的原始 git 版本的副本 我可以运行 diff show c function 来比较这两个文件 其中 理论上 它显示了已被调用的任何函数的全部内容改变了 这对于弄清楚我专门对文件做
  • 增加 Sublime Text 2 中最近项目的数量?

    是否可以增加 Sublime Text 2 中 项目 gt 最近的项目 菜单中显示的最近项目的数量 我搜索了设置 但没有找到任何内容 编辑这个文件 Library Application Support Sublime Text 2 Pac
  • RectF使用dp还是px?

    在Canvas中 用RectF画一个矩形 需要将top和left设置为dp还是px Integer padding 10 Integer width 100 It is dp or px Integer height 50 RectF po
  • Hadoop:如何将减速器输出合并到单个文件? [复制]

    这个问题在这里已经有答案了 我知道 shell 中的 getmerge 命令可以完成这项工作 但是 如果我想在作业结束后通过 HDFS API for java 合并这些输出 我该怎么办 我真正想要的是 HDFS 上的单个合并文件 我唯一能
  • C# 通用字符串解析为任何对象

    我将对象值存储在字符串中 例如 string values new string 213 4 10 hello MyValue 有什么方法可以通用地初始化适当的对象类型吗 例如 类似的东西 double foo1 AwesomeFuncti
  • Clojure 从指定位置的 Vector 中删除项目

    有没有办法根据索引从向量中删除项目 目前我正在使用 subvec 来分割向量并再次重新创建它 我正在寻找向量的 assoc 的反面 subvec可能是最好的方法 Clojure 文档说subvec is O 1 并且非常快 因为生成的向量与
  • 如何创建自定义列表累加器,即 List[(Int, Int)]?

    我正在尝试使用 Apache Spark 中的自定义累加器来累积列表中的对 结果应该有List Int Int 类型 为此 我创建了自定义累加器 import org apache spark AccumulatorParam class
  • 是什么导致了错误“返回类型‘TableRow’不是‘Widget’,如方法‘build’所定义”

    我正在 Flutter Dart 创建一个应用程序 目前正在研究该应用程序的布局 我正在尝试创建一个标准的表格布局 它工作得很好 直到我想将代码外包到不同的文件中 此时 我创建了一个扩展 StatelessWidget 的类 它重写返回 T
  • Linux 上的系统调用实际上是如何发生的?

    受到这个问题的启发 如何强制GDB反汇编 https stackoverflow com questions 1237489 how can i force gdb to disassemble 和这个相关的 什么是 INT 21 小时 h
  • TFS 2010 构建质量更改后发布到 FTP

    当我更改 TFS 2010 中构建的质量 更改为生产质量 时 我希望将构建上传到远程服务器上的 FTP 站点 您知道有什么工具可以实现此目的吗 如果没有 对我自己如何做到这一点有什么建议吗 TFSDeployer 可能很有用 构建质量更改事
  • Activity 恢复时不恢复 ViewPager

    我的项目的设置如下 Activity has Fragment它有ViewPager提供的页面FragmentStatePagerAdapter 显示的数据由ViewPager是从网络获取的 When Activity被破坏并恢复 它试图恢
  • Visual Studio Code,pylint 抱怨“无法导入 XXX”

    我在用视觉工作室代码处理一个包含许多模块的大型 python 项目 My settings json看起来像这样 python linting pylintEnabled true python linting enabled true p
  • Webpack - NodeJS - 找不到模块:错误:无法解析“fs”

    使用 webpack 构建 nodejs 项目时出现以下错误 ERROR in node modules mime mime js Module not found Error Can t resolve fs in C Sample no
  • 平均值的最大值

    我应该得到每个部门的平均工资 并且只显示平均工资最高的部门 我想出了这个查询 但它不起作用 有人有一些想法吗 SELECT department max avg wage FROM employees GROUP BY department
  • 如何解析和简化像“3cm/μs² + 4e-4 sqmiles/km/h**2”这样的字符串,正确处理物理单位?

    我想像这样分割一个字符串3cm s 4e 4 sqmiles km h 2进入其SI unit https en wikipedia org wiki International System of Units 在这种情况下 m s 2 及
  • fscanf() 仅拾取文件的第一行

    我有一个制表符分隔文件 我正在尝试将其转换为制表符分隔文件 我正在使用 C 我在尝试读取文件的第二行时遇到了困难 现在我只有数万行重复第一行 include
  • R 中的豪斯曼类型测试

    我一直在使用 plm 包的R进行面板数据分析 该软件包中用于选择 固定效应 或 随机效应 模型的重要测试之一称为豪斯曼型 Stata 也可进行类似的测试 这里的重点是Stata要求首先估计固定效应 然后再估计随机效应 但是 我在 plm 包
  • 如何在factory_bot中定义数组/哈希?

    我正在尝试编写一个测试来模拟 Dropbox 的 REST 服务的一些返回值 该服务以数组形式返回数据 并带有嵌套哈希 我无法弄清楚如何对我的工厂进行编码 因为返回结果是一个内部有 has 的数组 这里会放什么 Factory define
  • 如何在 Ruby 中使对象实例成为哈希键?

    我有一个带有一些成员变量的 Foo 类 当类的两个实例中的所有值都相等时 我希望对象 相等 然后我希望这些对象成为我的哈希中的键 当我当前尝试此操作时 哈希将每个实例视为不相等 h f1 Foo new a b f2 Foo new a b