微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐