加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么Ruby将FixNum n哈希为2n 1?

发布时间:2020-12-17 02:35:19 所属栏目:百科 来源:网络整理
导读:为什么 Ruby散列整数n到2 * n 1? [0,1,2,3].each {|x| puts x.hash}1357 我可以看到你并不总是需要复杂的哈希,特别是对于简单的对象.但是为什么’double和add 1’规则而不是做Python所做的事情,那就是将整数哈希给自己呢? map(hash,[0,3])[0,3] 有原因吗?
为什么 Ruby散列整数n到2 * n 1?

>> [0,1,2,3].each {|x| puts x.hash}
1
3
5
7

我可以看到你并不总是需要复杂的哈希,特别是对于简单的对象.但是为什么’double和add 1’规则而不是做Python所做的事情,那就是将整数哈希给自己呢?

>>> map(hash,[0,3])
[0,3]

有原因吗?

解决方法

整数是对象,因此它们有一个object_id.但是有无穷多的整数.看似没有其他物品的空间. Ruby如何解决这个问题?

10.times{|i| puts i.object_id}

输出:

1
3
5
7
9
11
13
15
17
19

整数占用所有奇怪的object_id,其余的对象介于两者之间,它们使用偶数.从object_id(和hash)到整数(反之亦然)的转换非常简单:切断最右边的1位(或添加它).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读