ruby – 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是否更改了原始方法定义?

解决方法

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...