如何创建一个别名方法来包装一个方法,该方法产生一个使用$1
变量的块?
更具体地说,我想monkeypatch 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
答案 0 :(得分:1)
这不是你问题的直接答案,但传递给sub的块接收匹配字符串作为参数,所以:
"mark = good".sub(/(good)|(bad)/) { |str| "very #{ str }" }
=> "mark = very good"
你能表现出更复杂的用法吗?