-
defmacro ~
でマクロを作れる -
基本はElixirの構文をASTに変換してから生成したい構文へと変換していく
-
ただそれだと面倒くさすぎるので
quote do ~
ブロックを使ってASTを構築する -
quote do ~
ブロック内では値など全てのものがASTに変換されるため、unquote()
を使って変数の値をASTに挿入する -
Nimのマクロにある
quote do:
と同じ(と言うか恐らく元ネタが同じ)
Elixirにはconstが無い為、代用として定数を返す関数を宣言することがよくある。
ただ、一々変数を宣言するためだけにdef ~
と書いていくのは非常に辛い。
macroを使って動的に関数を生成することで負担を減らすことができる。