Clojure-macros
Clojure-マクロ
どの言語でも、 Macro はインラインコードの生成に使用されます。 Clojureも例外ではなく、開発者にシンプルなマクロ機能を提供します。 マクロは、コード生成ルーチンを記述するために使用されます。これにより、開発者は開発者のニーズに合わせて言語を調整する強力な方法を提供できます。
以下は、マクロで使用できるメソッドです。
デフマクロ
この関数は、マクロを定義するために使用されます。 マクロには、マクロ名、パラメーターリスト、およびマクロの本文が含まれます。
構文
構文は次のとおりです。
(defmacro name [params*] body)
パラメータ-「名前」はマクロの名前です。 「params」は、マクロに割り当てられたパラメーターです。 「body」はマクロの本体です。
戻り値-なし。
例
これがどのように使用されるかの例は、次のプログラムに示されています。
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
出力
上記のプログラムは、次の出力を生成します。
Hello
上記のプログラムから、マクロ「Simple」がインラインで「println」「Hello」に展開されていることがわかります。 マクロは関数に似ていますが、マクロの場合にフォームへの引数が評価されるという唯一の違いがあります。
マクロ展開
これは、マクロを展開し、プログラム内にコードをインラインで配置するために使用されます。
構文
構文は次のとおりです。
(macroexpand 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マクロに引数を配置し、その引数を使用して引数値をリストに追加します。
出力
上記のプログラムは、次の出力を生成します。
(2 2)