Ruby - 如何重新定义类方法?

时间:2011-03-22 09:30:17

标签: ruby

如何在ruby中重新定义类方法?

说,例如,我想重新定义方法File.basename("C:\abc.txt")我该怎么做?

这不起作用:

class File
  alias_method :old_bn, :basename

  def basename(*args)
    puts "herro wolrd!"
    old_bn(*args)
  end
end

我得到: undefined method 'basename' for class 'File' (NameError)

不过,我正在使用JRuby

2 个答案:

答案 0 :(得分:17)

alias_method用于实例方法。但是File.basename是一种类方法。

class File
  class << self
    alias_method :basename_without_hello, :basename

    def basename(*args)
      puts "hello world!"
      basename_without_hello(*args)
    end
  end
end

class << self评估“班级”(Eigenklass)上的所有内容 - 因此您无需编写self.def self.basename)和alias_method适用于班级方法

答案 1 :(得分:3)

class << File
  alias_method :old_bn, :basename
  def basename(f)
    puts "herro wolrd!"
    old_bn(*args)
  end
end