मुझे समझ में नहीं आता कि यह क्यों काम करता है।रूबी: मॉड्यूल और सुपर?
module Base
attr_reader :first
def setup
@first = 1
end
end
module Addon
attr_reader :second
def setup
#super
@second = 2
end
end
class Test
include Base
include Addon
def initialize(num)
@num = num
setup
end
end
a = Test.new(1)
p a.first
p a.second
असल में मेरे पास "आधार" मॉड्यूल है, जो कुछ सामान सेट करता है। मेरे पास एक एडन मॉड्यूल भी है, जो कुछ वर्ग स्थापित करता है यदि कुछ वर्ग इसे शामिल करना चाहता है।
अब मैं इसे जब परीक्षण, अगर मुझे लगता है कि सुपर कॉल की जरूरत नहीं है, मैं
nil
2
मिल जब मैं सुपर कॉल की क्या ज़रूरत है, मैं
1
2
मिल सुपर वास्तव में क्या करता है यहाँ करो यह आधार मॉड्यूल से सेटअप विधि को कॉल कर रहा है, भले ही बेस और एडन संबंधित न हों।
यह पहली बार है जब मैंने मॉड्यूल के संदर्भ में सुपर का उपयोग किया है। पहले मैंने कक्षाओं के साथ हमेशा सुपर कॉल का इस्तेमाल किया था और सोचा था कि यह एक ही विधि के साथ माता-पिता को खोजने के लिए विरासत के पेड़ पर जा रहा था।
क्या कई मॉड्यूल भी कुछ प्रकार के विरासत पेड़ की स्थापना कर रहे हैं?
संपादित करें: संदर्भ के लिए, एडन मॉड्यूल को बेस मॉड्यूल के बिना कभी भी शामिल नहीं किया जाएगा, और बेस मॉड्यूल हमेशा किसी भी अतिरिक्त एडन मॉड्यूल से पहले शामिल किया जाएगा।
मुझे लगता है कि आप सही हैं। विधि हस्ताक्षर शायद एक ढेर में संग्रहीत किए जाते हैं और सुपर बस उस वस्तु को संदेश में एक गहराई में संदेश भेजता है। दिलचस्प लगता है कि मैं कहूंगा! – Candide