Возможно ли обезглавить метод с ударом в конце?Monkey-patching ruby method with bang
Я хочу, чтобы обезьяна-патч String.upcase!
, но я не знаю, как этого достичь.
Проблема в том, что я хочу изменить исходный объект строки.
Вот пример:
class String
def upcase!
self.mb_chars.upcase.to_s
end
end
Теперь, если я печатаю, что в консоли и попробовать его, он не работает:
[1] pry(main)> asd="asd"
=> "asd"
[2] pry(main)> asd.upcase
=> "ASD"
[3] pry(main)> asd
=> "asd"
[4] pry(main)> asd.upcase!
=> "ASD"
[5] pry(main)> asd
=> "asd"
Это не отличается от метода без помех в конце –
Предостережение: это * ваша ответственность за изменение метода вызывающего, если это то, что вы намереваетесь. Но это ничем не отличается от того, что вы несете ответственность за * не * изменение вызывающего абонента, когда вы обезьяны патчем тот же метод без взрыва. –