समझने की महत्वपूर्ण बात यह है कि रूबी में क्लास पद्धति जैसी कोई चीज नहीं है ।
एक वर्ग विधि वास्तव में सिर्फ एक एकल विधि है। क्लास के तरीकों के बारे में कुछ खास नहीं है। हर ऑब्जेक्ट में सिंगलटन तरीके हो सकते हैं। हम उन्हें "क्लास मेथड्स" कहते हैं, जब ऑब्जेक्ट एक Class
"एग्जाम्पल का सिंग्लटन मेथड Class
" होता है, वह बहुत लंबा और अलौकिक होता है।
रुको! क्या मैंने कहा "सिंगलटन विधि"?
समझने के लिए एक और महत्वपूर्ण बात यह है कि रूबी में एक सिंगलटन विधि जैसी कोई चीज नहीं है ।
एक सिंगलटन विधि वास्तव में सिंगलटन क्लास की एक नियमित उबाऊ पुरानी आवृत्ति है। सिंगलटन के तरीकों के बारे में कुछ खास नहीं है। वे किसी भी अन्य उदाहरण विधि की तरह सिर्फ उदाहरण के तरीके हैं।
वास्तव में, रूबी के पास केवल उदाहरण के तरीके हैं। कोई कार्य नहीं, कोई निर्माता नहीं, कोई स्थिर विधियाँ नहीं, कोई वर्ग विधियाँ नहीं, कोई मॉड्यूल कार्य नहीं, कोई एकल पद्धतियाँ नहीं।
सवाल यह नहीं है "क्या यह एक वर्ग विधि है, क्या यह एक एकल पद्धति है", बल्कि यह " इस पद्धति को किस मॉड्यूल में परिभाषित किया गया है?"
"सिंगलटन तरीके" वास्तव में एकलिंग क्लास में परिभाषित उदाहरण विधि हैं। के एकल वर्ग तक पहुँचने के लिए वाक्यविन्यास foo
है
class << foo
end
एक विधि भी है Object#singleton_class
जो एक वस्तु के सिंगलटन वर्ग को वापस करती है।
मैं इस तथ्य के बारे में आक्रामक तरीके से क्यों कह रहा हूं कि हर विधि एक उदाहरण विधि है और उस वर्ग के तरीके मौजूद नहीं हैं? क्योंकि इसका मतलब है कि रूबी का ऑब्जेक्ट मॉडल लोगों की तुलना में बहुत सरल है! आखिरकार, आपके प्रश्न में, आप पहले से ही दिखाते हैं कि आप उदाहरणों के तरीकों को अलियास करना जानते हैं, लेकिन आप कहते हैं कि आप क्लास के तरीकों को नहीं जानते हैं। लेकिन, यह गलत है! आप कर क्योंकि, जानते हैं कि कैसे उर्फ वर्ग तरीकों को वे सिर्फ उदाहरण तरीके हैं । यदि आपको इस तथ्य को ठीक से पढ़ाया जाता, तो आपको यह प्रश्न पूछने की आवश्यकता नहीं होती!
एक बार जब आप समझ जाते हैं कि हर विधि एक उदाहरण विधि है, और जिसे हम "सिंगलटन तरीके" कहते हैं, सिंगलटन वर्ग की सिर्फ उदाहरण विधियां हैं, तो समाधान स्पष्ट हो जाता है:
singleton_class.alias_method :a_new_class_method, :a_class_method
नोट: जब मैंने ऊपर लिखा कि "X जैसी कोई चीज नहीं है", तो मेरा मतलब था कि " रूबी भाषा में X जैसी कोई चीज नहीं है "। इसका मतलब यह नहीं है कि रूबी समुदाय में वे अवधारणाएं मौजूद नहीं हैं ।
हम नियमित रूप से, के बारे में "सिंगलटन तरीकों" और "वर्ग तरीकों" बात बस क्योंकि इसके बारे में "सिंगलटन वर्ग के उदाहरण तरीकों" या "किसी वस्तु की सिंगलटन वर्ग जो का एक उदाहरण होने के कहने तरीकों में बात कर की तुलना में आसान है Class
वर्ग "। वहाँ की तरह भी तरीके हैं Object#define_singleton_method
, Object#singleton_method
, Object#singleton_methods
, Module#private_class_method
, Module#public_class_method
, और Module#module_function
में रूबी कोर पुस्तकालय। लेकिन यह याद रखना हमेशा महत्वपूर्ण है कि वे भाषा की अवधारणा नहीं हैं। वे सामुदायिक अवधारणाएं हैं जो केवल हमारे सिर में और कुछ पुस्तकालय विधियों के नामों में मौजूद हैं ।
extend ClassMethods
समाधान के बारे में भूल गया । +1