Elixir におけるメタプログラミング、コンパイル時AST走査、およびマクロ作成のためのクイック構文リファレンスです。
🔗 関連ドキュメント: Elixir 言語基本チートシート
特殊形式と擬似変数(Special Forms & Pseudo-Variables)
Kernel.SpecialForms に定義されているコアメタプログラミング構成要素:
__DIR__ # 現在のファイルが配置されているディレクトリの絶対パス文字列
__MODULE__ # 現在のモジュール名のアトム(例: MyModule)
__ENV__ # 現在のコンパイル環境構造体(Macro.Env)
__CALLER__ # マクロ呼び出し元の環境構造体
実行環境の検査(ENV)
# コンパイル環境内のフィールドを検査
Map.keys(__ENV__)
# => [:__struct__, :aliases, :context, :context_modules, :export_vars, :file,
# :function, :functions, :lexical_tracker, :line, :macro_aliases, :macros,
# :module, :requires, :vars]
# 呼び出し元モジュール内の定義を検査
__CALLER__.module |> Module.definitions_in() |> IO.inspect()
クォート、AST、動的ディスパッチ(Quotes, AST & Dynamic Dispatch)
# 抽象構文木(AST)の生成
quote do: 1 + 2
# => {:+, [context: Elixir, import: Kernel], [1, 2]}
# quote 内での式の展開(unquote)
number = 10
quote do: 1 + unquote(number)
# 関数の動的呼び出し
apply(Enum, :reverse, [[1, 2, 3]])
# => [3, 2, 1]