我正在玩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永远不会相同.
这为我提出了几个问题:
object_id确定某些s?其他人基本上是随机的使用Andrew Grimm的建议,我尝试发现其他"低id"对象,但发现:
我Fixnum在doc中找到了以下功能.
Fixnum对象具有直接价值.这意味着当它们作为参数分配或传递时,将传递实际对象,而不是对该对象的引用.
可以在IRB中显示相同的内容吗?希望只有我能正确理解它?
赋值不会为Fixnum对象添加别名.
它究竟是什么呢?
对于任何给定的整数值,实际上只有一个Fixnum对象实例,因此,例如,您不能将单个方法添加到a
Fixnum.
无法理解不在对象实例中添加singleton方法的原因Fixnum.
我尝试了第二点,如下所示:
a = 1 # => 1
a.class # => Fixnum
b = a # => 1
b.class # => Fixnum
a == b # => true
a.equal? b # => true
a.object_id == b.object_id # => true
Run Code Online (Sandbox Code Playgroud)
但我仍然感到困惑.任何人都可以帮我在这里了解这些功能的核心吗?