我在玩Ruby的.object_id
,注意到在irb的几个连续会话中,我得到了这些相同的结果:
false.object_id // 0
true.object_id // 2
nil.object_id // 4
100.object_id // 201
事实上,每个整数的object_id似乎是((value*2)+1).
另一方面,一个给定字符串的object_id在退出并重新运行irb后永远不会相同.
这给我提出了几个问题:
- 是否有一个已知的方案来确定特定的
object_id
?其他人基本上是随机的吗? - true、false和nil的ID不是连续的.有没有办法询问给定id代表的是什么对象?(我很好奇其他的一位数和ID与什么有关.)
- 你能(不是说你应该)写一个模糊的Ruby吗?在这里,你可以使用已知的对象id来引用对象而不命名它们,比如"id为201的对象+id为19的对象"来表示"100+9"?
使现代化
根据Andrew Grimm的建议,我试图发现其他"低id"对象,但发现:
- 在这个序列中似乎没有更多偶数对象——ID6、8、10等没有指向任何东西.
- 正如我之前的实验所暗示的,所有奇数ID都属于数字.具体来说,ID1指向数字0,3指向1,5指向2,依此类推.