相关疑难解决方法(0)

object_id赋值如何工作?

我正在玩Ruby,.object_id并注意到,在irb的几个连续会话中,我得到了相同的结果:

false.object_id // 0
true.object_id // 2
nil.object_id // 4
100.object_id // 201
Run Code Online (Sandbox Code Playgroud)

实际上,每个整数的object_id似乎都是((value*2)+ 1).

另一方面,在退出并重新运行irb之后,给定字符串的object_id永远不会相同.

这为我提出了几个问题:

  1. 是否有已知的方案object_id确定某些s?其他人基本上是随机的
  2. true,false和nil的id不是顺序的.有没有办法询问给定id表示的对象是什么?(我很好奇其他一位数和ids的关系.)
  3. 你可以(不是你应该)编写模糊的Ruby,你使用已知的对象id引用对象而不命名它们,比如"id 201的对象+ id为19的对象"意味着"100 + 9"?

更新

使用Andrew Grimm的建议,我尝试发现其他"低id"对象,但发现:

  • 在这个序列中似乎没有任何更多的偶数对象 - ids 6,8,10等不指向任何东西.
  • 正如我之前的实验所暗示的那样,所有奇数编号的id都属于数字.具体地,id 1指向数字0,3指向1,5指向2,依此类推.

ruby internals

43
推荐指数
2
解决办法
1万
查看次数

标签 统计

internals ×1

ruby ×1