Können Sie eine Alias-Methode in Ruby überschreiben?

8

Wenn in Ruby eine Methode als Alias ​​verwendet wird, verweist der Alias ​​auf den Hauptteil der ursprünglichen Methode. Auch wenn Sie die ursprüngliche Methode neu definieren, wird der Alias ​​weiterhin die ursprüngliche Definition verwenden.

%Vor%

gibt 'bar' und nicht 'BAR' zurück. Gibt es eine Möglichkeit, Saloon die neue Definition von Bar zu verwenden?

EDIT: Ich hätte klarer sein sollen. Das Beispiel war nur eine Illustration des Problems - es ist nicht das eigentliche Problem, das ich lösen muss. Das Problem ist komplexer, wenn Sie Aliasnamen verkettet haben, z. B. im Kern von Rails. Z.B. perform_action wird vom Benchmarking-Modul und dann auch vom Flash-Modul aliasiert. Nun ruft ein Aufruf von perform_action tatsächlich perform_action_with_flash auf, was seine Sache tut, und ruft dann perform_action_with_benchmarking auf, das dann die ursprüngliche perform_action aufruft. Wenn ich perform_action_with_benchmarking überschreiben möchte (obwohl ich zustimme, dass es eine schlechte Idee ist - bitte lass uns nicht darüber diskutieren, da es außer dem Punkt ist), kann ich nicht, weil es Aliasing ist, und so weit ich das sagen kann alias verweist auf eine Kopie der ursprünglichen perform_action_with_benchmarking, und selbst wenn ich sie neu definiere, gibt es keinen Effekt.

    
farhadf 06.05.2011, 00:29
quelle

4 Antworten

2

Hier ist eine andere Antwort, aber Sie müssen einige zusätzliche Schritte ausführen: Sammeln Sie die Aliase vor dem Überschreiben und Realitäten nach:

%Vor%

Übrigens, wenn jemand einen dieser Schritte entfernen kann, darf ich es wissen! :)

    
Sony Santos 06.05.2011, 12:53
quelle
4

Stelle einfach den Alias ​​wieder her:

%Vor%     
coreyward 06.05.2011 00:34
quelle
3
%Vor%

Dies ist kein Alias, aber es funktioniert wie Sie wollen.

    
Sony Santos 06.05.2011 02:41
quelle
0

Ja und nein. Entweder coreyward oder die Lösungen von Sony Santos funktionieren gut. Was Sie wissen müssen, ist, warum Ihr Code nicht so funktioniert hat wie Sie.

alias erzeugt einen neuen Namen für die Funktion, wie sie beim Aufruf der Methode erscheint. Dies ist nicht ein Zeiger, sondern eine neue Art, sich auf etwas zu beziehen. Es erlaubt uns, so etwas zu tun:

%Vor%

Die alte Leiste existiert noch, es ist jetzt nur noch ein wenig schwieriger zu erreichen.

    
John F. Miller 06.05.2011 03:04
quelle

Tags und Links