class Computer # Eğer method __ ile başlıyorsa, veya method_missing ise veya respond_to ise # methodu çıkarma. instance_methods.each do |m| # undef_method kullandığımız zaman üst sınıflardan inherit edilen # tüm methodlar çıkarılır. undef_method m unless m.to_s =~ /^__|^method_missing$|^respond_to\?$/ end end
c = Computer.new begin c.inspect rescue Exception => e puts "inspect methodu undef_method ile cikarilmis: #{e.message}" end
class Monitor def hello "hello"; end end m = Monitor.new puts m.hello
class Monitor # inspect methodu Monitor classında tanımlanmadığı için remove_method # ile çıkarılamaz. begin remove_method :inspect rescue Exception => e puts e.message end # remove_method sadece o sınıfa ait methodları çıkarır. Inherit edilen # methodlara dokunmaz. O yüzden burda inherit edilen bir methodu # remove_method ile çıkarmaya çalıştığımız zaman hata verir. puts "hello methodunu remove_method ile cikariyoruz" remove_method :hello end
begin puts m.hello rescue Exception => e puts e.message end