मुझे समझ नहीं आता क्यों मॉड्यूल के वर्ग चर तक पहुँचने निम्न उदाहरण में विफल रहता है कर सकते हैं:मॉड्यूल और क्लास चर का उपयोग बढ़ाएं?
module M
@@xyz = 123
end
M.class_variables # [:@@xyz]
M.class_variable_get :@@xyz # 123 , so far so good
class C
extend M
end
C.singleton_class.class_variables # [:@@xyz]
C.singleton_class.class_variable_get :@@xyz # NameError:
# uninitialized class variable @@xyz in Class
किसी को भी व्याख्या कर सकते हैं क्यों वर्ग चर @@xyz
C
की सिंगलटन वर्ग में अचानक inacessible/अपरिभाषित है?
अद्यतन: मैंने उपरोक्त कोड को विभिन्न रूबी याएआरवी संस्करणों के साथ दोबारा जांच लिया और इसे नवीनतम में एक रिग्रेशन के रूप में ढूंढ लिया।
अद्यतन 2:
नवीनतम रूबी पीढ़ी में Module#class_variables
विधि की परिभाषा में बदलाव किया गया था।
रूबी अप परिभाषा 1.9.3 के लिए
class_variables → सरणी
आधुनिक में वर्ग चर के नाम की एक सरणी देता है।
रूबी 2.0.0 नवीनतम स्थिर संस्करण
class_variables(inherit=true) → सरणी
आधुनिक में वर्ग चर के नाम की एक सरणी देता है। यह में किसी भी मॉड्यूल, में कक्षा चर के नाम शामिल हैं जब तक कि विरासत पैरामीटर को गलत पर सेट न किया जाए।
इसलिए नवीनतम रूबी अवतार में class_variables
रिटर्न डिफ़ॉल्ट शामिल मॉड्यूल की भी वर्ग चर द्वारा। बस उत्सुक है कि यह सुविधा क्या है या यदि यह अभी भी include
के साथ "शामिल" चिंता मॉड्यूल करता है और extend
नहीं है।
क्या कोई समझा सकता है?
मुझे 'c.singleton_class.class_variables' पंक्ति से' [] 'मिला। आपको परिणाम कैसे मिला? –
आप किस रूबी कार्यान्वयन का उपयोग करते हैं? मेरे प्रश्न में मैंने उल्लेख किया कि इसका परीक्षण रुबी 1.9.3 और 2.0.0 के साथ किया गया था। सावा ने इस नोट को किसी ज्ञात कारण के लिए मिटा दिया। * आप पर शर्म आती है, साया *;) –
मैं 'सी: \> ruby -v रूबी का उपयोग कर रहा हूं 1.9.3p374 (2013-01-15) [i386-mingw32]' –