Краткий справочник

Шпаргалка по метапрограммированию в Elixir

Краткое справочное руководство по метапрограммированию в Elixir: __ENV__, __MODULE__, __CALLER__, Kernel.SpecialForms, макросы quote и unquote.

· Опубликовано

Краткий справочник по синтаксису метапрограммирования, интроспекции AST на этапе компиляции и написанию макросов в Elixir.

🔗 Связанные руководства: Шпаргалка по языку 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]}

# Разцитирование (unquote) внутри блока quote
number = 10
quote do: 1 + unquote(number)

# Динамический вызов функции
apply(Enum, :reverse, [[1, 2, 3]])
# => [3, 2, 1]

Связанные темы