我試圖重新定義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