2012-12-27 59 views

回答

9

内部Ruby¹不创建对象在所有与Fixnums。相反,实现使用“标记”指针,即如果设置了指针的最低有效位,Ruby明白这个指针实际上并不指向一个对象,而是直接编码Fixnum的值。因此具有相同数值的Fixnum将始终由相同的指针值表示。

¹我的意思是官方的Ruby解释器 - 其他的实现可能会以不同的方式处理。

2

它没有。 1011是Fixnums。正弦每个整数值只有一个Fixnum实例,10有一个object_id,而11有一个object_id。这就是你所看到的。

+1

常量并不一定意味着相同的值始终具有相同的'object_id'。浮游物和Bignum也是不变的,他们不像那样。说到Bignums:这种行为适用于Fixnums,而不是所有的整数。 – sepp2k

2

红宝石已经predifined对象

irb(main):001:0> 10.object_id 
=> 21 
irb(main):002:0> 11.object_id 
=> 23 

这是一些自然数,更

irb(main):003:0> true.object_id 
=> 2 
irb(main):004:0> false.object_id 
=> 0 
irb(main):005:0> nil.object_id 
=> 4 
irb(main):006:0> 0.object_id 
=> 1 
irb(main):007:0> -2.object_id 
=> -3 

和工作时,这些ID不会改变

5

在Ruby,Fixnum S,true,falsenilSymbol■找预定义object_id秒。

1.object_id #=> 3 
2.object_id #=> 5 

添加0到一个小的整数不改变它的值,因此其object_id保持相同。

但是,如果您在Bignum上运行相同的算术,您将得到不同的object_id s。

a = 1073741824 
puts a.object_id # => 7658076 
b = a + 0 
puts b # => 1073741824 
puts b.object_id # => 7287012 
相关问题