クイックリファレンス

Elixir メタプログラミング チートシート

Elixirメタプログラミングのクイックリファレンス:__ENV__、__MODULE__、__CALLER__、Kernel.SpecialForms、quote/unquoteマクロとAST操作。

· 公開日

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]

関連テーマ