2013-03-18 3 views
5

आइए खुला वर्ग Module और यह करने के लिए एक पद्धति जोड़ें:क्लास, मॉड्यूल, उनके eigenclasses, और विधि देखने

class Module 
    def foo 
    puts "phew" 
    end 
end 

मैं ऐसा करने से इस विधि कॉल कर सकते हैं,

Class.foo 

जो समझा जा सकता है क्योंकि Class का वर्ग Class है, जिसका सुपरक्लास Module है। इसलिए यह Module में परिभाषित उदाहरण विधियों को कॉल कर सकता है।

relation between classes and modules

अब, विधि नीचे barModule के eigenclass पर परिभाषित किया गया है:

class Module 
    def self.bar 
    puts "bar" 
    end 
end 

लेकिन अब

Class.bar 

भी काम करता है।

क्या कोई मुझे बता सकता है कि ClassModule के eigenclass में विधियों तक कैसे पहुंच सकता है?


मुझे लगता है कि मुझे अब मिल गया है। विधि दिखने से पहले मैंने समझाया नहीं है। जब मैं Class.foo करता हूं, तो विधि Class के ईजेनक्लास में खोजी जाती है और फिर यह सुपरक्लास है जो Module का ईगेंक्लास BasicObject तक ईगेंक्लास तक पहुंचता है जिस बिंदु पर यह स्वयं को चालू करता है (जैसे एक सांप अपनी खुद की पूंछ खा रहा है) देखने के लिए Class में विधि के लिए (ClassBasicObject के ईजेनक्लास के सुपरक्लास है) और फिर इसके सुपरक्लास 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 

यह मेरा वर्तमान समझ है: current understanding

+0

संबंधित चर्चा मुझे उपयोगी मिली: https: // stackoverflow।कॉम/प्रश्न/13269271/क्यों-ए-मॉड्यूल-सिंगलटन-विधि-दृश्य-इन-डाउनस्ट्रीम-ईजेनक्लास-जहां –

उत्तर

0

मैंने हाल ही में एक नया extensive tutorial लिखा है, जिसमें नए रूबी 2.0 व्यवहार शामिल हैं।

नोट: रुबी में उपयोग किया जाने वाला शब्द singleton_class है, eigenclass नहीं।

+0

उस यूआरएल पर लिंक मर चुका है –

1

रूबी के विधि लुकअप व्यवहार का एक व्यापक व्यापक अवलोकन है जब Eigenclasses this blog post by Andrea Singh में शामिल हैं। विशेष रूप से, बहुत अंत के पास "Eigenclasses और कक्षा विरासत" अनुभाग में एक उपयोगी लुकअप आरेख शामिल है जो आपके प्रश्नों को संबोधित करना चाहिए।

+0

क्या यह रूबी 2.2 के रूप में चालू है? –

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