我试图重新定义File.dirname方法,首先将%20s更改为空格。但下面给我一个错误重新定义File :: dirname ruby方法
class File
old_dirname = instance_method(:dirname)
define_method(:dirname) { |s|
s = s.gsub("%20"," ")
old_dirname.bind(self).call(s)
}
end
这trhows一个NameError异常:未定义的方法“目录名称”类“文件”
什么是做到这一点的正确方法?
感谢您的帮助 – jrhicks 2009-09-30 04:04:56
这是*不相当于代码@jrhicks张贴在他的问题!该代码使用剩余的'File :: old_dirname'方法污染了'File'元类的名称空间,而问题中的原始代码非常小心地避免了这个问题。 – 2009-09-30 10:05:28
Chuck对范围的讨论是完全正确的,但Jörg说得对:'alias_method'可能是“惯用的”,但它绝对不如OP的原始方法安全。 – 2009-09-30 12:45:32