2011-11-25 5 views
22

जब मैं एक नई वस्तु बनाने के लिए, मान लीजिए किक्या मुझे रूबी में object_id विशेषता द्वारा ऑब्जेक्ट मिल सकता है या नहीं?

o = Object.new 

इस वस्तु एक आईडी है,

o.object_id 
#=> ######## 

मैं भी कई अन्य वस्तुओं बनाने, वस्तु वर्ग का उपयोग कर सकते हैं। Object_id विशेषता का उपयोग कर ऑब्जेक्ट 'ओ' को खोजने के लिए रूबी को सबसे अच्छा तरीका क्या होगा? मैं

search_id = o.object_id 
search_result = Object.find(search_id) 

पर कुछ खोज के मामले में सोच रहा हूं, जहां 'search_results' 'search_id' से संबंधित वस्तु होगी। इसके अलावा, मैं वस्तुओं को अनुक्रमणित करने और उन्हें एक गाइड या कुछ द्वारा पुनर्प्राप्त करने के लिए एक पूरी तरह से अलग दृष्टिकोण की सराहना करता हूं। बहुत बहुत धन्यवाद!

हां, मुझे लगता है कि मुझे वास्तव में डेटाबेस के संदर्भ में इसके बारे में सोचने की ज़रूरत है और केवल MySQL प्रश्नों का उपयोग करें या जो भी डीबी मैं वस्तु को ढूंढने के लिए चुनता हूं। जितना अधिक मैं इसके बारे में सोचता हूं, केवल एकमात्र संभावित चीजें जो इस काल्पनिक 'खोज()' विधि के माध्यम से सुलभ होंगी वे ऐसी चीजें होंगी जो नव निर्मित या 'सक्रिय' होंगी? यह एक गंदे सवाल बनाने के लिए खेद है।

उत्तर

53

हाँ, आप कर सकते हैं:

irb(main):002:0> s1 = "foo" 
#=> "foo" 
irb(main):003:0> s2 = ObjectSpace._id2ref(s1.object_id) 
#=> "foo" 
irb(main):004:0> s2.object_id == s1.object_id 
#=> true 
irb(main):005:0> s2[0] = "z" 
#=> "z" 
irb(main):006:0> s1 
#=> "zoo" 

आप यह कर देना चाहिए? मैं इसे तुम्हारे पास छोड़ दूंगा। एक ऑब्जेक्ट को एक serializable id (उदा। एक ऐरे में और अनुक्रमणिका लौटने) के साथ स्टोर करने के लिए कम geeky तरीके हैं। एक समस्या जो आप चला सकते हैं वह यह है कि यदि आप किसी ऑब्जेक्ट में रखते हैं तो केवल 'संदर्भ' object_id है, तो ऑब्जेक्ट जीसी द्वारा एकत्र किया जा सकता है जब आप नहीं देख रहे हैं।

+0

क्षमा करें मुझे यहां वापस आने के लिए इतना लंबा लगा। यह निश्चित रूप से मेरे मूल प्रश्न का उत्तर दिया। मैंने थोड़ी सी भ्रामक माध्यमिक सामग्री को वहां लपेट लिया, लेकिन मैं किसी बिंदु पर अपने आप या किसी अन्य प्रश्न से निपटूंगा। आपका बहुत बहुत धन्यवाद! – wuliwong

+1

यदि वह कक्षा-चर में अपनी कक्षा द्वारा बनाए गए सभी उदाहरणों को बनाए रखेगा, तो वह उन्हें कचरा इकट्ठा करने से रोक सकता है, और वह ऑब्जेक्ट_आईडी का उपयोग उन्हें संदर्भित करने के लिए – Tilo

+0

'आवश्यकता की आवश्यकता' objspace '- गैर तुच्छ .... – ribamar

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