如何在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
答案 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