2009-03-19 8 views

उत्तर

1

अच्छी तरह से, यह "रूबी" द्वारा आपके मतलब पर निर्भर करता है;) jruby में यह एक अद्वितीय पूर्णांक है जहां तक ​​मैं कह सकता हूं।

इसके अलावा, संख्याओं जैसी चीजें स्मृति स्थान नहीं हैं। मैं सभी विवरण भूल जाता हूं और मुझे यकीन है कि कोई आपको उन्हें देगा।

irb(main):020:0> 1.object_id 
=> 3 
irb(main):021:0> (2-1).object_id 
=> 3 
+1

Fixnum object_id बिट में जमा हो जाती है:

ObjectSpace._id2ref(object_id) 

उदाहरण के लिए कम से कम महत्वपूर्ण बिट सेट, http://stackoverflow.com/questions/2402228/accessing-objects-memory-address-in-ruby/2402440#2402440 आपका '(2-1)' समझ में नहीं आता है, कोशिश करें इसके बजाय '(4711 >> 1) .object_id' –

1

"सामान्य" रूबी (एमआरआई 1.8.एक्स और 1.9.एक्स) में यह सिर्फ एक अद्वितीय मूल्य है।

यह भी IronRuby

6

में मामला है यह कई मापदंडों मूल्य, ऑब्जेक्ट प्रकार, स्मृति में जगह का एक संयोजन है।
अधिक पढ़ा जा सकता है here

4

यह स्मृति स्थान का प्रत्यक्ष संदर्भ नहीं है और "एन्कोडिंग" किसी विशेष रूबी कार्यान्वयन के लिए विशिष्ट है। यदि आप सी कोड पढ़ सकते हैं, तो आपको रूबी 1.8.6 स्रोत में gc.c में rb_obj_id और id2ref विधियों को देखने के लिए निर्देशक मिल सकता है। आप Ruby Hacking Guide chapter 2 के आंशिक अनुवाद के "VALUE में एम्बेड किए गए ऑब्जेक्ट्स" अनुभाग में "एन्कोडिंग" के बारे में और भी पढ़ सकते हैं।

+0

[एमआरआई स्रोत से लिंक।] (http: // rxr। whitequark.org/mri/source/gc.c#3158) –

3

यह ध्यान देने योग्य है कि आप का उपयोग कर वस्तु आईडी की एक रिवर्स देखने प्रदर्शन कर सकते हैं लायक है: बाईं ओर और साथ स्थानांतरित कर दिया

ObjectSpace._id2ref(0) #=> false 
ObjectSpace._id2ref(1) #=> 0 
ObjectSpace._id2ref(2) #=> true 
ObjectSpace._id2ref(3) #=> 1 
ObjectSpace._id2ref(4) #=> nil 
संबंधित मुद्दे

 संबंधित मुद्दे