ruby - 单个 ruby​​ 进程中的数字上的 `hash` 是否一致?

标签 ruby hash hashcode

当您对数字运行 hash 时,它会在同一个 ruby​​ 进程中始终返回相同的值吗?

似乎2.hash在irb的单个进程内总是返回相同的值,但是如果关闭并重新打开irb,则会得到不同的值。流程中的每个数字是否始终保持一致?

我相信 ruby​​ 至少使用某些对象的内存位置来计算哈希值,这对于数字也一样吗?如果是这样,一个数字的两个实例是否总是具有相同的内存位置?

最佳答案

是的,保证在一个 Ruby 进程中是相同的。 Hash 依靠这一事实来保证唯一的 key 。否则,当对象获取新的哈希值时,长期存在的进程可能会出现重复的哈希键。

关于实现和内存位置,Ruby保证hash的实现。唯一的要求是:

This function must have the property that a.eql?(b) implies a.hash == b.hash.

例如,在 YARV 中,许多对象根本不存在于内存中(例如 Fixnums),而只是通过特殊的对象 ID 来标识。 x.object_id == x * 2 + 1 对于任何修复数。

关于ruby - 单个 ruby​​ 进程中的数字上的 `hash` 是否一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992317/

相关文章:

ruby-on-rails - 如何从(YAML)哈希中递归删除所有具有空值的键?

Java - Point 类的 hashCode() 方法是否有用,还是我应该覆盖它并编写自己的方法?

ruby - 仅在存在时包含 Jekyll 模板

jquery - ajax 如何从 ruby​​ on rails Controller 中检索数据

node.js - 如何使用nodejs验证Symfony2 sha512密码

hash - adler32 哈希的可怕冲突

ruby-on-rails - faraday如何设置日志级别

ruby-on-rails - do..end 与 Ruby 中 block 的花括号

c# - 如何为一对 3D 向量实现 GetHashCode

c# - 如何为结构实现 base.GetHashCode()?