आइए खुला वर्ग Module
और यह करने के लिए एक पद्धति जोड़ें:क्लास, मॉड्यूल, उनके eigenclasses, और विधि देखने
class Module
def foo
puts "phew"
end
end
मैं ऐसा करने से इस विधि कॉल कर सकते हैं,
Class.foo
जो समझा जा सकता है क्योंकि Class
का वर्ग Class
है, जिसका सुपरक्लास Module
है। इसलिए यह Module
में परिभाषित उदाहरण विधियों को कॉल कर सकता है।
अब, विधि नीचे bar
Module
के eigenclass पर परिभाषित किया गया है:
class Module
def self.bar
puts "bar"
end
end
लेकिन अब
Class.bar
भी काम करता है।
क्या कोई मुझे बता सकता है कि Class
Module
के eigenclass में विधियों तक कैसे पहुंच सकता है?
मुझे लगता है कि मुझे अब मिल गया है। विधि दिखने से पहले मैंने समझाया नहीं है। जब मैं Class.foo
करता हूं, तो विधि Class
के ईजेनक्लास में खोजी जाती है और फिर यह सुपरक्लास है जो Module
का ईगेंक्लास BasicObject
तक ईगेंक्लास तक पहुंचता है जिस बिंदु पर यह स्वयं को चालू करता है (जैसे एक सांप अपनी खुद की पूंछ खा रहा है) देखने के लिए Class
में विधि के लिए (Class
BasicObject
के ईजेनक्लास के सुपरक्लास है) और फिर इसके सुपरक्लास Module
पर, जहां यह विधि पाती है।
इसी प्रकार, जब मैं Class.bar
करते हैं, विधि Class
में रों के eigenclass Module
में और फिर 'की खोज कर रहा है eigenclass जहां यह यह पाता है।
जब मैं
class Class
def check
puts "class instance method"
end
end
और
class Module
def self.check
puts "modules eigenclass method"
end
def check
puts "module instance method"
end
end
अनुमान wot कर उत्पादन होता है जब मैं कार्य करें:
Class.check
यह मेरा वर्तमान समझ है:
संबंधित चर्चा मुझे उपयोगी मिली: https: // stackoverflow।कॉम/प्रश्न/13269271/क्यों-ए-मॉड्यूल-सिंगलटन-विधि-दृश्य-इन-डाउनस्ट्रीम-ईजेनक्लास-जहां –