为什么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位(或添加它). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |