私はthis ruby object_id割り振りの質問に戻ってきました。そして、この素晴らしい、articleを読んで、VALUEについて語り、object_idがtrue、nil、falseの理由を説明します。私はtrueとnilのobject_idに関する明らかな変更を見つけたときにruby2.0のobject_idを使っていました。ruby2.0でtrueとnilのobject_idが変更されたのはなぜですか?
forbidden:~$ ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]
forbidden:~$
forbidden:~$ irb
irb(main):001:0> true.object_id
=> 20
irb(main):002:0> false.object_id
=> 0
irb(main):003:0> nil.object_id
=> 8
irb(main):004:0> exit
forbidden:~$
forbidden:~$ rvm use 1.9.3
Using /home/forbidden/.rvm/gems/ruby-1.9.3-p392
forbidden:~$ ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]
forbidden:~$
forbidden:~$ irb
irb(main):001:0> true.object_id
=> 2
irb(main):002:0> false.object_id
=> 0
irb(main):003:0> nil.object_id
=> 4
TL; DR:真とゼロの値がそれぞれ2であった、1.9.3および1.8.7に4が、20に変更されている、ruby2.0.0 8 - さえfalseのIDは同じままですが、つまりFixnumのidは同じ古い2n + 1パターンを維持します。何
irb(main):001:0>
irb(main):002:0* ((2**62)).class
=> Bignum
irb(main):003:0> ((2**62)-1).class
=> Fixnum
irb(main):004:0>
:上記の記事で与えられた例は、また、それがために使用されるだけで同じように実行しても
、FixnumかとBIGNUMが実装されている方法はまだ2.0.0で同じですこのobject_idの変更理由
なぜこの変更が行われましたか?これは開発者をどのように助けるでしょうか?
多分彼らはいくつかのより多くの内部オブジェクトを追加したので、これらの値を変更しました...彼らはどれも数字であることは保証されていませんか?とにかく、あなたはruby-develメーリングリストに尋ねることができました... – rogerdpack
'true.object_id'と' nil.object_id'が変更されたのはどういう意味ですか?特定の値を持つことは保証されておらず、 'ruby'を別々に呼び出しても同じ値であることが保証されているかどうかは疑問です。 –
私はWindowsマシンでRuby2.0を使用していますが、何も変更されていません。 –