File.dirname 메서드를 먼저 재정 의하여 % 20s를 공백으로 변경하려고합니다. 클래스 '파일'에 대한 'dirname은'File :: dirname ruby 메서드를 다시 정의하십시오.
이 작업을 수행하는 올바른 방법은 무엇입니까 정의되지 않은 메서드 :하지만 다음 날이가 나가서 설명하자면 NameError 예외를 trhows
class File
old_dirname = instance_method(:dirname)
define_method(:dirname) { |s|
s = s.gsub("%20"," ")
old_dirname.bind(self).call(s)
}
end
오류 준다?
감사합니다. – jrhicks
이것은 그의 질문에 게시 된 @jrhicks 코드와 동일하지 않습니다 *! 이 코드는 잔여'File :: old_dirname' 메쏘드로'File' 메타 클래스의 네임 스페이스를 오염시키는 반면, 문제의 원래 코드는이 문제를 피하기 위해 각별한주의를 기울입니다. –
범위에 대한 논의는 완전히 정확합니다.하지만 Jörg는 맞습니다. 'alias_method'는 "관용적"일 수 있지만 OP의 원래 방법보다 안전하지 않습니다. –