2016-06-18 16:19:06 +00:00
|
|
|
---
|
|
|
|
title: Elixir metaprogramming
|
|
|
|
category: Elixir
|
|
|
|
---
|
|
|
|
|
2023-03-14 04:40:29 +00:00
|
|
|
### Kernel
|
2016-06-18 16:19:06 +00:00
|
|
|
|
|
|
|
Most of these magic is defined in [Kernel.SpecialForms](http://devdocs.io/elixir/elixir/kernel.specialforms).
|
|
|
|
|
|
|
|
### Pseudo-variables
|
|
|
|
|
|
|
|
```elixir
|
|
|
|
__DIR__ # current dir
|
|
|
|
__MODULE__ # current module
|
|
|
|
__CALLER__ # caller of the function
|
|
|
|
```
|
|
|
|
|
|
|
|
### [`__ENV__`](http://devdocs.io/elixir/elixir/kernel.specialforms#__ENV__/0)
|
|
|
|
|
|
|
|
```elixir
|
|
|
|
Map.keys(__ENV__)
|
|
|
|
[:__struct__, :aliases, :context, :context_modules, :export_vars, :file,
|
|
|
|
:function, :functions, :lexical_tracker, :line, :macro_aliases, :macros,
|
|
|
|
:module, :requires, :vars]
|
|
|
|
```
|
|
|
|
|
|
|
|
```elixir
|
|
|
|
__CALLER__.module |> Module.definitions_in |> IO.inspect
|
|
|
|
```
|
|
|
|
|
|
|
|
```elixir
|
|
|
|
apply(Enum, :reverse, [[1, 2, 3]])
|
|
|
|
```
|