2012-12-09 28 views
32

respond_to? को परिभाषित करने के विरोध में respond_to_missing? को परिभाषित करने का क्या मतलब है? यदि आप कुछ कक्षाओं के लिए respond_to? को फिर से परिभाषित करते हैं तो क्या गलत होता है?`answer_to?` बनाम `answer_to_missing?`

उत्तर

37

respond_to_missing? परिभाषित के बिना, method के माध्यम से विधि प्राप्त करने की कोशिश असफल हो जायेगी:

class Foo 
    def method_missing name, *args 
    p args 
    end 

    def respond_to? name, include_private = false 
    true 
    end 
end 

f = Foo.new 
f.bar #=> [] 
f.respond_to? :bar #=> true 
f.method :bar # NameError: undefined method `bar' for class `Foo' 

class Foo 
    def respond_to? *args; super; end # “Reverting” previous redefinition 

    def respond_to_missing? *args 
    true 
    end 
end 

f.method :bar #=> #<Method: Foo#bar> 

Marc-André (एक रूबी कोर committer) एक अच्छा blog post on respond_to_missing? है।

+1

ओह, यह एक अच्छा जवाब है! मैं अपना हट रहा हूँ। मुझे कुछ नया सिखाने के लिए धन्यवाद! – joelparkerhenderson

+0

जानकारी के लिए धन्यवाद। – sawa

+0

ब्याज से, तब के लिए 'answer_to?' क्या अच्छा है। क्या इसके लिए वैध उपयोग केस है? –