当您对数字运行 hash
时,它会在同一个 ruby 进程中始终返回相同的值吗?
似乎2.hash
在irb的单个进程内总是返回相同的值,但是如果关闭并重新打开irb,则会得到不同的值。流程中的每个数字是否始终保持一致?
我相信 ruby 至少使用某些对象的内存位置来计算哈希值,这对于数字也一样吗?如果是这样,一个数字的两个实例是否总是具有相同的内存位置?
最佳答案
是的,保证在一个 Ruby 进程中是相同的。 Hash
依靠这一事实来保证唯一的 key 。否则,当对象获取新的哈希
值时,长期存在的进程可能会出现重复的哈希键。
关于实现和内存位置,Ruby不保证hash
的实现。唯一的要求是:
This function must have the property that
a.eql?(b)
impliesa.hash == b.hash
.
例如,在 YARV 中,许多对象根本不存在于内存中(例如 Fixnums),而只是通过特殊的对象 ID 来标识。 x.object_id == x * 2 + 1
对于任何修复数。
关于ruby - 单个 ruby 进程中的数字上的 `hash` 是否一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992317/