Referencia rápida

Hoja de referencia de Metaprogramación en Elixir

Guia rapida de referencia para metaprogramacion en Elixir: __ENV__, __MODULE__, __CALLER__, Kernel.SpecialForms, macros quote y unquote.

· Publicado

Referencia rapida de sintaxis para metaprogramacion, introspeccion de AST en tiempo de compilacion y creacion de macros en Elixir.

🔗 Relacionado: Hoja de referencia del lenguaje Elixir

Formas especiales y pseudovariables (Special Forms & Pseudo-Variables)

Constructos principales definidos en Kernel.SpecialForms:

__DIR__     # Ruta absoluta al directorio del archivo actual
__MODULE__  # Atomo con el nombre del modulo actual
__ENV__     # Estructura del entorno de compilacion (Macro.Env)
__CALLER__  # Estructura del entorno del invocador del macro

Inspeccionar el entorno de ejecución (ENV)

# Inspeccionar campos del entorno de compilacion
Map.keys(__ENV__)
# => [:__struct__, :aliases, :context, :context_modules, :export_vars, :file,
#     :function, :functions, :lexical_tracker, :line, :macro_aliases, :macros,
#     :module, :requires, :vars]

# Inspeccionar definiciones en el modulo invocador
__CALLER__.module |> Module.definitions_in() |> IO.inspect()

Quotes, AST y despacho dinámico (Quotes, AST & Dynamic Dispatch)

# Generar arbol de sintaxis abstracta (AST)
quote do: 1 + 2
# => {:+, [context: Elixir, import: Kernel], [1, 2]}

# Unquote dentro de quote
number = 10
quote do: 1 + unquote(number)

# Invocacion dinamica de funciones
apply(Enum, :reverse, [[1, 2, 3]])
# => [3, 2, 1]

Temas relacionados