यह इतना स्पष्ट नहीं हो सकता है कि answer_to? रूबी में काम करता है। कि विचार करें:respond_to? और संरक्षित तरीके
class A
def public_method
end
protected
def protected_method
end
private
def private_method
end
end
obj = A.new
obj.respond_to?(:public_method)
# true - that's pretty obvious
obj.respond_to?(:private_method)
# false - as expected
obj.respond_to?(:protected_method)
# true - WTF?
तो अगर 'obj' protected_method का जवाब हम
obj.protected_method
एक अपवाद को बढ़ाने के लिए नहीं की उम्मीद करनी चाहिए, हम नहीं करना चाहिए?
... लेकिन यह स्पष्ट रूप से
प्रलेखन अंक respond_to बुला कि जन्म देती है? साथ 2 तर्क के रूप में अच्छी तरह से
obj.respond_to?(:private_method, true)
# true
सच की जांच निजी विधि करने के लिए सेट और वह कहीं अधिक उचित
है तो सवाल यह है कि अगर वस्तु सार्वजनिक विधि केवल का जवाब की जांच करने के लिए है? क्या इससे कोई समाधान बेहतर है?
obj.methods.include?(:public_method)
# true
obj.methods.include?(:protected_method)
# false
अनुवादित जापानी समझना मेरे लिए मुश्किल है लेकिन वैसे भी यह जानना अच्छा है कि रूबी कोर उस मुद्दे पर विचार करता है। कम से कम एक obj.class.public_method_defined का उपयोग कर सकता है? (: Protect_method) और यह अपेक्षित के रूप में काम करता है लेकिन सिंगलटन विधियों को संभाल नहीं पाएगा, इसलिए मैं मानता हूं कि वर्कअराउंड वास्तविक समाधान नहीं है – mlomnicki
अद्यतन जानकारी के साथ अद्यतन उत्तर –