Переменная $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"
Можете ли вы показать более сложное использование того, что вы пытаетесь сделать?