Clojure - makra
W dowolnym języku Macrossłużą do generowania kodu wbudowanego. Clojure nie jest wyjątkiem i zapewnia programistom proste funkcje makr. Makra są używane do pisania procedur generowania kodu, które zapewniają programiście potężny sposób dostosowania języka do potrzeb programisty.
Poniżej przedstawiono metody dostępne dla makr.
defmacro
Ta funkcja służy do definiowania makra. Makro będzie miało nazwę makra, listę parametrów i treść makra.
Składnia
Poniżej znajduje się składnia.
(defmacro name [params*] body)
Parameters- „nazwa” to nazwa makra. „params” to parametry przypisane do makra. „body” to treść makra.
Return Value - Żaden.
Przykład
Przykład tego, jak jest używany, pokazano w poniższym programie.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
Wynik
Powyższy program generuje następujące dane wyjściowe.
Hello
Z powyższego programu widać, że makro „Simple” jest rozwijane w wierszu do „println” „Hello”. Makra są podobne do funkcji, z tą różnicą, że argumenty formularza są obliczane w przypadku makr.
makro-rozwinąć
Służy do rozwijania makra i umieszczania kodu w programie.
Składnia
Poniżej znajduje się składnia.
(macroexpand macroname)
Parameters - „nazwa_makra” to nazwa makra, które ma zostać rozszerzone.
Return Value - Rozszerzone makro.
Przykład
Przykład tego, jak jest używany, pokazano w poniższym programie.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
Wynik
Powyższy program generuje następujące dane wyjściowe.
Hello
Makro z argumentami
Makra mogą być również używane do przyjmowania argumentów. Makro może przyjmować dowolną liczbę argumentów. Poniższy przykład pokazuje, jak można używać argumentów.
Przykład
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple [arg]
(list 2 arg))
(println (macroexpand '(Simple 2))))
(Example)
Powyższy przykład umieszcza argument w makrze Simple, a następnie używa tego argumentu, aby dodać wartość argumentu do listy.
Wynik
Powyższy program generuje następujące dane wyjściowe.
(2 2)