别名方法中块中的$ 1变量

时间:2013-02-16 16:37:24

标签: ruby monkeypatching

如何创建一个别名方法来包装一个方法,该方法产生一个使用$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

1 个答案:

答案 0 :(得分:1)

这不是你问题的直接答案,但传递给sub的块接收匹配字符串作为参数,所以:

"mark = good".sub(/(good)|(bad)/) { |str| "very #{ str }" }
=> "mark = very good"

你能表现出更复杂的用法吗?