Clojure - Makros
In jeder Sprache, Macroswerden verwendet, um Inline-Code zu generieren. Clojure ist keine Ausnahme und bietet Entwicklern einfache Makrofunktionen. Makros werden zum Schreiben von Routinen zur Codegenerierung verwendet, die dem Entwickler eine leistungsstarke Möglichkeit bieten, die Sprache an die Anforderungen des Entwicklers anzupassen.
Im Folgenden sind die für Makros verfügbaren Methoden aufgeführt.
defmacro
Diese Funktion wird verwendet, um Ihr Makro zu definieren. Das Makro hat einen Makronamen, eine Parameterliste und den Hauptteil des Makros.
Syntax
Es folgt die Syntax.
(defmacro name [params*] body)
Parameters- 'name' ist der Name des Makros. 'params' sind die dem Makro zugewiesenen Parameter. 'body' ist der Body des Makros.
Return Value - Keine.
Beispiel
Ein Beispiel für die Verwendung wird im folgenden Programm gezeigt.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
Ausgabe
Das obige Programm erzeugt die folgende Ausgabe.
Hello
Aus dem obigen Programm können Sie erkennen, dass das Makro 'Einfach' inline zu 'println' "Hallo" erweitert wurde. Makros ähneln Funktionen, mit dem einzigen Unterschied, dass die Argumente für ein Formular bei Makros ausgewertet werden.
Makro erweitern
Dies wird verwendet, um ein Makro zu erweitern und den Code in das Programm einzufügen.
Syntax
Es folgt die Syntax.
(macroexpand macroname)
Parameters - 'Makroname' ist der Name des Makros, das erweitert werden muss.
Return Value - Das erweiterte Makro.
Beispiel
Ein Beispiel für die Verwendung wird im folgenden Programm gezeigt.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
Ausgabe
Das obige Programm erzeugt die folgende Ausgabe.
Hello
Makro mit Argumenten
Makros können auch verwendet werden, um Argumente aufzunehmen. Das Makro kann beliebig viele Argumente aufnehmen. Das folgende Beispiel zeigt, wie Argumente verwendet werden können.
Beispiel
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple [arg]
(list 2 arg))
(println (macroexpand '(Simple 2))))
(Example)
Im obigen Beispiel wird ein Argument in das einfache Makro eingefügt und das Argument dann verwendet, um einer Liste einen Argumentwert hinzuzufügen.
Ausgabe
Das obige Programm erzeugt die folgende Ausgabe.
(2 2)