Clojure - Macro
In qualsiasi lingua, Macrosvengono utilizzati per generare codice in linea. Clojure non fa eccezione e fornisce semplici funzionalità macro per gli sviluppatori. Le macro vengono utilizzate per scrivere routine di generazione del codice, che forniscono allo sviluppatore un modo potente per adattare il linguaggio alle esigenze dello sviluppatore.
Di seguito sono riportati i metodi disponibili per le macro.
defmacro
Questa funzione viene utilizzata per definire la macro. La macro avrà un nome macro, un elenco di parametri e il corpo della macro.
Sintassi
Di seguito è riportata la sintassi.
(defmacro name [params*] body)
Parameters- "nome" è il nome della macro. 'params' sono i parametri assegnati alla macro. "body" è il corpo della macro.
Return Value - Nessuno.
Esempio
Un esempio di come viene utilizzato è mostrato nel seguente programma.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
Produzione
Il programma precedente produce il seguente output.
Hello
Dal programma sopra puoi vedere che la macro 'Simple' è espansa inline a 'println' “Hello”. Le macro sono simili alle funzioni, con la sola differenza che gli argomenti di un modulo vengono valutati nel caso delle macro.
macro-espandere
Viene utilizzato per espandere una macro e inserire il codice inline nel programma.
Sintassi
Di seguito è riportata la sintassi.
(macroexpand macroname)
Parameters - "macroname" è il nome della macro che deve essere espansa.
Return Value - La macro espansa.
Esempio
Un esempio di come viene utilizzato è mostrato nel seguente programma.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
Produzione
Il programma precedente produce il seguente output.
Hello
Macro con argomenti
Le macro possono essere utilizzate anche per accettare argomenti. La macro può contenere un numero qualsiasi di argomenti. L'esempio seguente mostra come utilizzare gli argomenti.
Esempio
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple [arg]
(list 2 arg))
(println (macroexpand '(Simple 2))))
(Example)
L'esempio precedente inserisce un argomento nella macro Semplice e quindi utilizza l'argomento per aggiungere il valore dell'argomento a un elenco.
Produzione
Il programma precedente produce il seguente output.
(2 2)