2012-12-27 92 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 
相關問題