Guida rapida di riferimento per metaprogrammazione, ispezione AST e macro in Elixir.
🔗 Correlato: Foglio di riferimento Linguaggio Elixir
Forme speciali e pseudovariabili (Special Forms & Pseudo-Variables)
Costrutti principali definiti in Kernel.SpecialForms:
__DIR__ # Percorso assoluto della directory del file corrente
__MODULE__ # Atomo del nome del modulo corrente
__ENV__ # Struct dell'ambiente di compilazione (Macro.Env)
__CALLER__ # Struct dell'ambiente del chiamante della macro
Ispezione dell'ambiente (ENV)
# Esplorare i campi dell'ambiente di compilazione
Map.keys(__ENV__)
# => [:__struct__, :aliases, :context, :context_modules, :export_vars, :file,
# :function, :functions, :lexical_tracker, :line, :macro_aliases, :macros,
# :module, :requires, :vars]
# Ispezionare le definizioni nel modulo chiamante
__CALLER__.module |> Module.definitions_in() |> IO.inspect()
Quote, AST e dispatch dinamico (Quotes, AST & Dynamic Dispatch)
# Generare l'albero sintattico astratto (AST)
quote do: 1 + 2
# => {:+, [context: Elixir, import: Kernel], [1, 2]}
# Unquote all'interno di quote
number = 10
quote do: 1 + unquote(number)
# Invocazione dinamica di funzione
apply(Enum, :reverse, [[1, 2, 3]])
# => [3, 2, 1]