Method lookup for class singleton methods in Ruby -


मैं इस धारणा के तहत था कि obj.method रूबी को विधि < / Code> इस प्रकार:

  1. obj के एकलटन वर्ग में देखें।
  2. obj 'सिंगलटन क्लास'।
  3. obj वर्ग में देखें।
  4. obj
  5. जब तक नहीं मिला, मूल ऑब्जेक्ट पर कॉल करें method_missing , obj

    इस मॉडल के तहत, विधि के लिए खोज केवल एकलटन वर्ग मूल रिसीवर के एकलटन वर्ग है, < कोड> obj । हालांकि, यह मॉडल इस तथ्य को नहीं समझा सकता है कि उप-वर्ग अपने सुपरक्लास की सिंगलटन विधियों तक पहुंच सकता है। उदाहरण के लिए

      वर्ग Foo def self.foo "foo" अंत अंत वर्ग बार & lt; Foo end Bar.foo # = & gt; "Foo"   

    मैं उलझन में हूँ क्योंकि मेरा मानना ​​है कि इसका अर्थ है कि Foo का सिंगलटन क्लास किसी बिंदु पर खोजा जाता है foo । हालांकि, ऊपर दिए गए मॉडल के तहत, मुझे उम्मीद थी कि केवल बार के एकलटन वर्ग को foo के लिए खोजा जाएगा। ऐसा न मानने पर, मैं रूबी को बार वर्ग, कक्षा में देखने की उम्मीद करता हूं, और तब सुपरक्लैश श्रृंखला ( फू को छोड़कर) उसके एकलटन वर्ग पूरी तरह से)।

    तो मेरा प्रश्न: रूबी विधि लुकअप की मेरी समझ से जो गुम है, इस तथ्य के बारे में बताता है कि एक वर्ग अपने सुपर वर्ग की सिंगलटन तरीकों तक पहुंच सकता है? < P>

    उप-क्लासिंग करते समय, न केवल बार। सुपर क्लास को Foo पर सेट है, लेकिन वही सिंगलटन कक्षाओं के लिए सही है:

      बार.singleton_class.superclass == Foo.singleton_class # = & gt; सच   

    तो तुम वास्तव में उलझन में नहीं हो। वास्तविक लुकअप है:

    1. obj के सिंगलटन क्लास के साथ आरंभ करें।
    2. पूर्वजों की सूची में उदाहरण तरीकों को देखें:
        < Li> प्रीड्यूल किए गए मॉड्यूल (रुबी 2.0)
      • क्लास में ही
      • मॉड्यूल शामिल हैं
      • सुपरक्लास के साथ # 2 दोहराएं।
      • # 1 दोहराएं लेकिन इस बार method_missing की तलाश में है

Comments