(перенесено из исходного вопроса)
Я предполагаю, что вы говорите о методе Array # do_stuff, который уже существует, но вы хотите немного его изменить (в вашем случае, изменив параметр по умолчанию).
Пост здесь дает хороший способ сделать это. Он не страдает от тех же проблем, что и метод псевдонима, так как не существует «старого» метода.
Вот, как вы могли бы использовать эту технику в своем примере задачи (протестировано с ruby 1.9)
class Array
old_do_stuff = instance_method(:do_stuff)
define_method(:do_stuff) { |options = {}|
options[:option] ||= " option "
old_do_stuff.bind(self).call(options)
}
end
Вы также можете прочитать UnboundMethod , если приведенный выше код сбивает с толку. Обратите внимание, что old_do_stuff выходит из области видимости после оператора end, поэтому это не проблема для использования Array в будущем.