2013-05-29 48 views
3

我所遇到下面的代码:define_method是否重写与其参数具有相同名称的方法?

class MethodLogger 
    def log_method((klass,method_name) 
     klass.class_eval do 
     alias_method "#{method_name}_original" method_name 
     define_method method_name do 
      puts "#{Time.now}: Called #{method_name}" 
      send "#{method_name}_original" 
     end 
     end 
    end 
    end 


class Tweet 
def say_hi 
    puts "Hi" 
end 
end 

logger =MethodLogger.new 
logger.log_method(Tweet,:say_hi) 

这使输出

2012-09-11 12:54:09 -400: Called say_hi

那么,如何在define_method:say_hi覆盖原始方法:say_hi?或者define_method改变了原来的方法定义?

回答

4

如果您多次定义一个方法,所有后面的定义都会覆盖旧的方法。只能有一个名称相同的方法。

相关问题