На любом языке макросы используются для генерации встроенного кода. Clojure не является исключением и предоставляет простые средства макросов для разработчиков. Макросы используются для написания процедур генерации кода, которые предоставляют разработчику мощный способ адаптировать язык к потребностям разработчика.
Ниже приведены методы, доступные для макросов.
defmacro
Эта функция используется для определения вашего макроса. Макрос будет иметь имя макроса, список параметров и тело макроса.
Синтаксис
Ниже приводится синтаксис.
(defmacro name [params*] body)
Параметры — ‘name’ — это имя макроса. «params» — это параметры, назначенные макросу. «тело» — это тело макроса.
Возвращаемое значение — Нет.
пример
Пример того, как это используется, показан в следующей программе.
(ns clojure.examples.example (:gen-class)) (defn Example [] (defmacro Simple [] (println "Hello")) (macroexpand '(Simple))) (Example)
Выход
Вышеуказанная программа производит следующий вывод.
Hello
Из вышеприведенной программы вы можете видеть, что макрос «Simple» встроен в «println» «Hello». Макросы похожи на функции, с той лишь разницей, что аргументы формы оцениваются в случае макросов.
макро-расширение
Это используется для расширения макроса и размещения встроенного кода в программе.
Синтаксис
Ниже приводится синтаксис.
(macroexpand macroname)
Параметры — «macroname» — это имя макроса, который необходимо расширить.
Возвращаемое значение — расширенный макрос.
пример
Пример того, как это используется, показан в следующей программе.
(ns clojure.examples.example (:gen-class)) (defn Example [] (defmacro Simple [] (println "Hello")) (macroexpand '(Simple))) (Example)
Выход
Вышеуказанная программа производит следующий вывод.
Hello
Макрос с аргументами
Макросы также можно использовать для аргументов. Макрос может принимать любое количество аргументов. В следующем примере показано, как можно использовать аргументы.
пример
(ns clojure.examples.example (:gen-class)) (defn Example [] (defmacro Simple [arg] (list 2 arg)) (println (macroexpand '(Simple 2)))) (Example)
Приведенный выше пример помещает аргумент в макрос Simple и затем использует аргумент для добавления значения аргумента в список.
Выход
Вышеуказанная программа производит следующий вывод.