Szybka pomoc

Ściągawka z metaprogramowania w Elixirze

Szybki przewodnik po metaprogramowaniu w Elixirze: __ENV__, __MODULE__, __CALLER__, Kernel.SpecialForms, makra quote i unquote oraz operacje na AST.

· Opublikowano

Szybki przewodnik po skadni metaprogramowania, inspekcji drzewa AST i tworzeniu makr w Elixirze.

🔗 Powiązane: Ściągawka z języka Elixir

Formy specjalne i pseudozmienne (Special Forms & Pseudo-Variables)

Kluczowe konstrukcje zdefiniowane w Kernel.SpecialForms:

__DIR__     # Bezwzgledna sciezka do katalogu biezacego pliku
__MODULE__  # Atom nazwy biezacego modulu
__ENV__     # Struktura srodowiska kompilacji (Macro.Env)
__CALLER__  # Struktura srodowiska wywolujacego makro

Inspekcja środowiska wykonawczego (ENV)

# Sprawdzanie pol srodowiska kompilacji
Map.keys(__ENV__)
# => [:__struct__, :aliases, :context, :context_modules, :export_vars, :file,
#     :function, :functions, :lexical_tracker, :line, :macro_aliases, :macros,
#     :module, :requires, :vars]

# Inspekcja definicji w module wywolujacym
__CALLER__.module |> Module.definitions_in() |> IO.inspect()

Cytowania, AST i dynamiczne wywołania (Quotes, AST & Dynamic Dispatch)

# Generowanie abstrakcyjnego drzewa skladniowego (AST)
quote do: 1 + 2
# => {:+, [context: Elixir, import: Kernel], [1, 2]}

# Wstawianie wartosci unquote wewnatrz quote
number = 10
quote do: 1 + unquote(number)

# Dynamiczne wywolanie funkcji
apply(Enum, :reverse, [[1, 2, 3]])
# => [3, 2, 1]

Powiązane tematy