Переменная $1 в блоке с псевдонимом

Как я могу создать метод с псевдонимом, который оборачивает метод, который приводит к блоку, который использует $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 ответ

Это не прямой ответ на ваш вопрос, но блок, переданный в sub, получает в качестве параметра соответствующую строку так:

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

Можете ли вы показать более сложное использование того, что вы пытаетесь сделать?

Другие вопросы по тегам