October 20th, 2011 14:00 |
Category: Ruby
undef_method
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
remove_method
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
Resources