इस article से प्रेरित, मैं रूबी विधि कॉलिंग पदानुक्रम के साथ खेल रहा था और कुछ अजीब देखा।रूबी विधि-कॉलिंग पदानुक्रम
को देखते हुए:
class B
def foo
"- Instance method defined by B"
end
def method_missing(method)
puts "- method_missing (#{method}) on b. Redirecting to b.foo\n"
foo
end
end
b = B.new
def b.foo
"- Method defined directly on an instance of B\n" + super
end
def b.method_missing(method)
"- method_missing (#{method}) on b. Calling super\n" + super
end
puts "Calling 'bar' on b of type #{b.class}:"
puts b.bar
चल रहा है यह देता है:
Calling 'bar' on b of type B:
- method_missing (bar) on b. Redeirecting to b.foo
- method_missing (bar) on b. Calling super
- Method defined directly on an instance of B
- instance method defined by B
मेरा प्रश्न है:
जब से मैं बोल रहा हूँ b.bar (वस्तु पर), कैसे वर्ग के उदाहरण आना objet की आवृत्ति विधि कहा जाता है इससे पहले विधि कहा जाता है?
मैं, उम्मीद है | b.method_missing(method)
पहले के नाम से जाना तो वर्ग के उदाहरण method_missing(method)
(के बाद से मैं सुपर बोल रहा हूँ? लेकिन सुपर वर्ग पदानुक्रम ... है) जो bar
से foo
पर रीडायरेक्ट करता है। इसके अलावा, कैसे आते हैं, foo
पर रीडायरेक्ट होने के बाद, उदाहरण के missing_method को कॉल किया जाता है? हमें अभी बताया गया था कि हमें पुनर्निर्देशित किया जा रहा है ...
मुझे लगता है कि मुझे इस अवधारणा को समझ में नहीं आता कि कैसे रूबी एक वर्ग (मेरे लिए नया) के उदाहरण पर एक उदाहरण विधि को परिभाषित करने की अनुमति देता है, के विपरीत इसे कक्षा (क्लासिक भाषाओं) की एक उदाहरण विधि के रूप में परिभाषित करना।
मुझे आशा है कि इस सवाल का समझ में आता है, हो सकता है मेरे सिर अभी भी कल रात से स्पिन हो रही है ...
मैं वापसी मान के साथ
b.method_missing
में स्ट्रिंग आउटपुट ऊपर देखा समस्या को और स्पष्ट बनाने के लिए अप्रासंगिक कोड हटा दिया गया। एक समस्या का * न्यूनतम * उदाहरण प्रदान करना आम तौर पर एक अच्छा विचार है। –