(bewegte sich von Ihrer ursprünglichen Frage)
Ich nehme an, Sie sprechen über eine Methode Array # do_stuff die bereits vorhanden ist, aber Sie wollen es leicht ändern (in Ihrem Fall durch Ändern eines Standardparameters).
Ein Beitrag here gibt eine nette Möglichkeit, es zu tun. Es leidet nicht an den gleichen Problemen wie die Alias-Technik, da es keine übriggebliebene "alte" Methode gibt.
Hier, wie Sie diese Technik mit Ihrem Beispiel Problem verwenden könnte (mit Ruby getestet 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
Sie möchten vielleicht auch bis auf UnboundMethod lesen, wenn der obige Code verwirrend ist. Beachten Sie, dass old_do_stuff nach der Endanweisung den Gültigkeitsbereich verlässt. Dies ist also kein Problem für zukünftige Verwendungen von Array.
Das Problem bei diesem Ansatz ist, dass die Option 'option1' nicht gesetzt wird, wenn sie einen Hash von Optionen ohne den Schlüssel 'option1' übergeben. – Benjamin