Ich habe einen kleinen, aber wachsenden Rahmen für den Aufbau von .net-Systemen mit Ruby / Rake , an dem ich schon seit einiger Zeit arbeite jetzt. In dieser Codebasis habe ich Folgendes:
%Vor%Das Muster, dem dieser Code folgt, wird im Framework etwa 20 Mal wiederholt. Der Unterschied in jeder Version ist der Name der Klasse, die erstellt / aufgerufen wird (anstelle von AssemblyInfoTask, kann es MSBuildTask oder NUnitTask sein) und der Inhalt der execute-Methode. Jede Aufgabe hat ihre eigene Ausführung der Ausführungsmethode.
Ich repariere ständig Bugs in diesem Code-Muster und ich muss das Update 20 Mal wiederholen, jedes Mal wenn ich eine Reparatur brauche.
Ich weiß, dass es möglich ist, einige Meta-Programmierzauber zu machen und diesen Code für jede meiner Aufgaben von einem einzigen Ort aus zu verkabeln ... aber es fällt mir wirklich schwer, es zum Laufen zu bringen.
meine Idee ist, dass ich in der Lage sein möchte, so etwas zu nennen:
%Vor%und das würde alles anschließen, was ich brauche.
Ich brauche Hilfe! Tipps, Vorschläge, jemand, der bereit ist, dies anzugehen ... Wie kann ich dieses Code-Muster immer wieder wiederholen?
Update: Sie können den vollständigen Quellcode hier abrufen: Ссылка der angegebene Code ist / lib / rake / assemblyinfotask.rb
Ok, hier ist eine Metaprogrammierung, die das macht, was du willst (in ruby18 oder ruby19)
%Vor%Die wichtigsten Werkzeuge in der Metaprogrammer-Toolbox sind:
class<<self;self;end
- um die Metaklasse für jedes Objekt zu erhalten, so dass Sie Methoden für dieses Objekt definieren können define_method
- so können Sie Methoden definieren, die aktuelle lokale Variablen verwenden Auch nützlich sind
const_set
, const_get
: erlauben Ihnen, Konstanten class_eval
: erlaubt die Definition von Methoden mit def
, als ob Sie in einer class <Classname> ... end
-Region So etwas, getestet auf Ruby 1.8.6:
%Vor%Das Kernstück ist die Methode "create_task":
Tags und Links ruby dry metaprogramming