यहाँ मान लें कि कुछ मनमाने ढंग से पुस्तकालय कोड है कि मैं के बारे में पता नहीं है।क्या मुझे पता चल सकता है कि एक विधि ओवरराइड कर दी गई है?</p> <pre><code>class Foo def hi end end class Bar < Foo def hi end end </code></pre> <p>और लगता है मैं कुछ कोड है, जहां मैं एक पैरामीटर के रूप में पारित कर रहा हूँ <code>Bar</code> है:
def check(x)
do_something_with(x.method(:hi))
end
उपरोक्त उदाहरण में, मैं जानता हूँ कि कर सकते हैं कि x.hi
(जहां x
संदर्भ Bar
का एक उदाहरण) विभिन्न Foo#hi
से है?
गैरेथ के जवाब के आधार पर, यह मैं अब तक क्या मिल गया है है:
def is_overridden?(method)
name = method.name.to_sym
return false if !method.owner.superclass.method_defined?(name)
method.owner != method.owner.superclass.instance_method(name).owner
end
हाइडियस? भव्य?
हालांकि यह जरूरी नहीं है, मैं उत्सुक हूं कि आप ऐसा क्यों करना चाहते हैं। –
इसके अलावा, ऐसा लगता है कि आप केवल उसी वर्ग पर मौजूदा विधि को फिर से परिभाषित करने के विरोध में विरासत के संबंध में "ओवरराइडिंग" की परवाह करते हैं? –