1
我怎樣才能創建一個包裝能產生到使用$1
變量塊的方法的別名方法在塊變量?
更具體地說,我想猴補丁String#sub
(是的,我知道這是不是一個好的做法)來修改傳遞給它的正則表達式在使用之前。
我試過下面的代碼沒有成功。
class String
alias :sub_orig :sub
def sub(*args, &block)
# do stuff with args
sub_orig(*args, &block)
end
end
下面的測試顯示的問題是什麼
"mark = good".sub(/(good)|(bad)/) { "very " + $1 }
TypeError: can't convert nil into String
可惜我不能修改調用'字符串#sub'的代碼,這就是我爲什麼猴子打補丁這種方法。 – gioele 2013-02-16 17:09:18
這裏的問題是,當你定義塊時,$ 1會被綁定。 如果你在調用子程序之前執行以下操作,你會發現塊內的$ 1在主範圍中的值爲$ 1:''hola「.gsub /(ola)/,'''(調用sub = mark = good will給你mark = very ola) – akhanubis 2013-02-16 17:17:28