# pry / irb example #1
"abc".hash
=> -1883761119486508070
"abc".hash
=> -1883761119486508070
# pry / irb example #2
"abc".hash
=> -4309321811150053495
"abc".hash
=> -4309321811150053495
hash
值对于特定调用是常量,但在调用之间会有所不同。为什么?这是设计的吗?这被认为是“好事”吗?
我正在运行ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.0.0]
。
答案 0 :(得分:7)
根据http://patshaughnessy.net/Ruby-Under-a-Microscope-Rough-Draft-May.pdf
的第23页这是Ruby的哈希函数实际上如何工作... [snip] ...对于字符串和数组,它的工作方式不同。在这种情况下,Ruby实际上遍历所有 的人物 在数组中的字符串或元素中计算累积哈希值;这保证了 对于字符串或数组的任何实例,哈希值将始终相同,并且如果有任何实例,则哈希值将始终更改 该字符串或数组中的值发生变化。
和
另外,Ruby 1.9和Ruby 2.0使用随机种子值初始化MurmurHash 每次重启Ruby时重新初始化。这意味着,如果你停止并重新启动Ruby,你将会这样做 获取相同输入数据的不同哈希值。这也意味着如果你自己尝试一下 你会得到与我上面不同的价值观。但是,哈希值将始终为 在同一个Ruby进程中也是如此。