जब मैं लिखने के लिए निम्न कोड:रूबी सरणी अजीब बात (अनंत सरणी)
x= [1,2,3]
x << x
puts x
puts x[3]
puts x[3][3][3][3][3][3][3][3][3][3]
मैं इस उत्पादन प्राप्त करें:
[1, 2, 3, [...]]
[1, 2, 3, [...]]
[1, 2, 3, [...]]
मैं नहीं करना चाहिए केवल [1,2,3, [1,2,3]] और स्पष्टीकरण क्या होगा?
रूबी 1.9, 'ऐरे # <=>', '#eql? 'और' # हैश' भी' हैश 'और' स्ट्रक्चर 'के लिए रिकर्सन के साथ सौदा करता है ... सुनिश्चित नहीं है कि आप क्यों विचार करते हैं यह "असामान्य" है! http://blog.marc-andre.ca/2009/05/lost-in-recursion.html –
मुझे नहीं लगता कि "असीमित रिकर्सिव स्व-रेफरेंसियल सरणी" एक सामान्य उपयोग केस है जो सामान्य प्रोग्रामर इस पर विचार करेगा: -) मैंने 'to_s' कार्यान्वयन के अपने हिस्से को लिखा है, लेकिन मैंने कभी * के लिए विशेष आवरण नहीं माना। अगर कोई अनंत डेटा संरचना के स्ट्रिंग प्रस्तुति के लिए पूछता है, तो उन्हें अनंत लूप मिलेगा। अवधि। मेरा मतलब है, एक अनंत 'एन्युमरेटर' के लिए 'नक्शा' एक असीमित बड़ी सरणी देता है, और कोई भी इसके बारे में दो बार नहीं सोचता है, क्या यह कुछ हद तक समान नहीं है? –
मुझे लगता है कि यह अच्छा है कि रूबी अच्छी तरह से रिकर्सिव संरचनाओं से संबंधित है। मुझे यकीन नहीं है कि वे बहुत असामान्य हैं, उदा। संरचनाएं जो उनके माता-पिता और बच्चों को पकड़ती हैं। यदि यह मामला नहीं था, तो स्मृति गणना को संभालने के लिए रेफ गिनती की आवश्यकता होगी :-) –