Ausführen von Code für jeden Methodenaufruf in einem Ruby-Modul
Ich Schreibe ein Modul in Ruby 1.9.2, definiert mehrere Methoden. Wenn eine dieser Methoden aufgerufen wird, möchte ich jeden von Ihnen zum ausführen einer bestimmten Anweisung zuerst.
module MyModule
def go_forth
a re-used statement
# code particular to this method follows ...
end
def and_multiply
a re-used statement
# then something completely different ...
end
end
Aber ich möchte vermeiden, dass a re-used statement
code explizit in jeder einzelnen Methode. Gibt es eine Möglichkeit, dies zu tun?
(Wenn es darauf ankommt, a re-used statement
wird jede Methode, wenn Sie aufgerufen wird, drucken Sie Ihren eigenen Namen. Es wird über eine Variante der puts __method__
.)
InformationsquelleAutor der Frage GladstoneKeep | 2011-04-01
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie diese:
InformationsquelleAutor der Antwort horseyguy
Dies ist genau das, was aspector erstellt.
Mit aspector brauchen Sie nicht zu schreiben, das boilerplate metaprogramming-code. Sie können sogar einen Schritt weiter gehen, um zu extrahieren die gemeinsame Logik in einem separaten Aspekt der Klasse und testen unabhängig.
InformationsquelleAutor der Antwort Guoliang Cao
Ich weiß nicht, warum ich downvoted, aber einen richtigen AOP-framework ist besser als meta-Programmierung Hack. Und das ist, was die OP wurde versucht zu erreichen.
http://debasishg.blogspot.com/2006/06/does-ruby-need-aop.html
Andere Lösung könnte sein:
InformationsquelleAutor der Antwort Hemant Kumar
Implementieren Sie können es mit
method_missing
durch proxy-Modul, so wie dieses:InformationsquelleAutor der Antwort fl00r
Können Sie dies tun, indem Sie metaprogramming Technik, hier ein Beispiel:
funktioniert nur in ruby 1.9 und höher
UPDATE: und auch nicht verwenden können, blockieren, d.h. es werden keine Ausbeute in Instanz-Methoden
InformationsquelleAutor der Antwort megas
Ist es möglich, mit der meta-Programmierung.
Andere alternative ist Aquarium. Aquarium ist ein framework implementiert, mit der Aspekt-Orientierten Programmierung (AOP) für Ruby. AOP erlauben, Sie zu implementieren, die die Funktionalität über die normale Objekt und Methode Grenzen. Ihre Nutzung Fall der Anwendung eines pre-Aktion auf jede Methode, ist eine grundlegende Aufgabe des AOP.
InformationsquelleAutor der Antwort Hemant Kumar