Ich muss mehrere Methoden zu einem Clojure defprotocol
hinzufügen, das ich für mehrere identische Swing-Komponenten schreibe:
Gibt es eine Möglichkeit, dass ich ein Makro schreiben kann, das alle drei Methodensignaturen zurückgibt ( xxx-button-add-action-listener
, xxx-button-set-enabled
, xxx-button-set-selected
)?
Dieses Makro muss dem wachsenden defprotocol
bei jedem Aufruf drei Elemente hinzufügen.
Kann ein Makro '~@a-list
zurückgeben und "an Ort und Stelle" expandieren?
Ja, Sie müssen nur Ihr Makro in einem (do ...)
erweitern, und der Clojure-Compiler wird die do
untergeordneten Elemente als eine Folge von Top-Level-Formularen fädeln.
Ich glaube, dass ein Makro zu einer einzigen Form erweitert werden muss - also können Sie das nicht genau so machen, wie Sie es beschreiben.
Jedoch ist nicht alles verloren, weil es sicherlich möglich wäre, dies mit einem Makro auf der obersten Ebene zu schreiben, das ungefähr so aussieht:
%Vor%Was können Sie wie folgt verwenden:
%Vor%