Fixnumのobject_id

SymbolだけでなくFixnumも値が等しければobject_idが等しくなるようだ.

# Fixnum
1.equal?(1)     #=> true
3.equal?(1 + 2) #=> true

# Float
1.0.equal?(1.0) #=> false

# Bignum
10000000000000000000.class                        #=> Bignum
10000000000000000000.equal?(10000000000000000000) #=> false

プログラミング言語Rubyを参照したところ,Fixnumのobject_idに関する記述は見つからなかったが,代わりに「3.8.1.1 即値」で以下のような記述を見つけた.

Rubyのすべての値はオブジェクトであり,オブジェクトはすべて参照によって操作されると説明したが,リファレンス実装では,FixnumとSymbolだけは参照ではなく,「即値」になっている.これらのクラスはミューテータメソッドを持っておらず,だからFixnumとSymbolはイミュータブルであり,参照ではなく値によって操作されているかどうかを見分ける方法はない.

この即値である事実が関係しているのだろうか.

プログラミング言語 Ruby

プログラミング言語 Ruby

  • 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/01/26
  • メディア: 大型本
  • 購入: 21人 クリック: 356回
  • この商品を含むブログ (128件) を見る