Ich stolperte this ruby object_id Allokation Frage irgendwann zurück und dann lesen Sie diese wunderbare article, die über Wert spricht und warum object_id von wahr, null und falsch, wie sie sind. Ich habe mit ruby2.0 object_id gespielt, als ich die scheinbare Änderung fand, die bezüglich object_id von true und nil gemacht wurde.Warum wurde die object_id für true und nil in ruby2.0 geändert?
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:Die Werte für den tatsächlichen nil wurden jeweils 2, 4 in 1.9.3 und 1.8.7, haben aber bis 20, 8 in ruby2.0.0 geändert wurde - auch obwohl die ID von Falsch gleich bleibt, dh 0, und die IDs für Fixnum das gleiche alte 2n + 1-Muster beibehält.
Auch die Art und Weise Fixnum und Bignum umgesetzt werden, ist immer noch das gleiche in 2.0.0 wie das Beispiel in dem oben erwähnten Artikel angegeben auch nur die gleiche Art und Weise ausgeführt wird, um es verwendet:
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>
Was das ist Grund hinter dieser object_id Änderung?
Warum wurde diese Änderung vorgenommen? Wie wird das Entwicklern helfen?
vielleicht fügten sie noch einige interne Objekte, so dass es änderte diese Werte ... sie sind nicht garantiert, irgendeine Zahl sind sie? Wie auch immer, du könntest auf der Ruby-devel-Mailingliste fragen ... – rogerdpack
Warum ist es wichtig, ob 'true.object_id' und' nil.object_id' geändert werden? Es ist nicht garantiert, dass sie bestimmte Werte haben, und ich bezweifle, dass sie sogar in verschiedenen Aufrufen von 'Ruby' identisch sind. –
Ich benutze Ruby2.0 in Windows-Rechner, für mich hat sich nichts geändert. –