Spec-Zone.ru › Elixir 1.10

Macro.Env

Структура, хранящая информацию об окружении во время компиляции.

Текущее окружение можно получить в любое время как __ENV__/0. Внутри макросов, окружение вызывающего можно получить как __CALLER__/0.

Экземпляр Macro.Env не должен изменяться вручную. Если вам нужно создать пользовательское окружение для передачи в Code.eval_quoted/3, используйте следующий трюк:

def make_custom_env do
  import SomeModule, only: [some_function: 2]
  alias A.B.C
  __ENV__
end

Затем вы можете вызвать make_custom_env(), чтобы получить структуру с необходимыми импортами и алиасами.

Она содержит следующие поля:

  • aliases — список кортежей из двух элементов, где первый элемент — алиас, а второй — фактическое имя.
  • context — контекст окружения; он может быть nil (по умолчанию), :guard (внутри условия) или :match (внутри совпадения).
  • context_modules — список модулей, определённых в текущем контексте.
  • file — текущее имя файла в виде бинарного.
  • function — кортеж, как {atom, integer}, где первый элемент — имя функции, а второй — её арность; возвращает nil если не находится внутри функции.
  • functions — список функций, импортированных из каждого модуля.
  • line — текущая строка как целое число.
  • macro_aliases — список алиасов, определённых внутри текущего макроса.
  • macros — список макросов, импортированных из каждого модуля.
  • module — текущее имя модуля.
  • requires — список необходимых модулей.

Следующие поля являются частными для механизма макрорасширения Elixir и не должны напрямую использоваться:

  • contextual_vars
  • current_vars
  • lexical_tracker
  • prematch_vars
  • tracers
  • unused_vars

Следующие поля устарели и не должны использоваться:

  • vars — список, хранящий все определённые переменные как {var, context}

Краткое описание

Типы

aliases()
context()
context_modules()
file()
functions()
lexical_tracker()
line()
macro_aliases()
macros()
name_arity()
requires()
t()
variable()

Функции

has_var?(env, var)

Проверяет, принадлежит ли переменная окружению.

in_guard?(env)

Возвращает значение, указывающее, находится ли окружение компиляции внутри условия.

in_match?(env)

Возвращает значение, указывающее, находится ли окружение компиляции внутри блока совпадений.

location(env)

Возвращает список ключевых слов, содержащий информацию о файле и строке в качестве ключей.

stacktrace(env)

Возвращает стек вызовов окружения.

to_match(env)

Возвращает Macro.Env в контексте совпадения.

vars(env)

Возвращает список переменных в текущем окружении.

Типы

aliases()

Specs

aliases() :: [{module(), module()}]

context()

Specs

context() :: :match | :guard | nil

context_modules()

Specs

context_modules() :: [module()]

file()

Specs

file() :: binary()

functions()

Specs

functions() :: [{module(), [name_arity()]}]

lexical_tracker()

Specs

lexical_tracker() :: pid() | nil

line()

Specs

line() :: non_neg_integer()

macro_aliases()

Specs

macro_aliases() :: [{module(), {term(), module()}}]

macros()

Specs

macros() :: [{module(), [name_arity()]}]

name_arity()

Specs

name_arity() :: {atom(), arity()}

requires()

Specs

requires() :: [module()]

t()

Specs

t() :: %Macro.Env{
  aliases: aliases(),
  context: context(),
  context_modules: context_modules(),
  contextual_vars: contextual_vars(),
  current_vars: current_vars(),
  file: file(),
  function: name_arity() | nil,
  functions: functions(),
  lexical_tracker: lexical_tracker(),
  line: line(),
  macro_aliases: macro_aliases(),
  macros: macros(),
  module: atom(),
  prematch_vars: prematch_vars(),
  unused_vars: unused_vars(),
  requires: requires(),
  tracers: tracers(),
  vars: vars()
}

variable()

Specs

variable() :: {atom(), atom() | term()}

Функции

has_var?(env, var)

Specs

has_var?(t(), variable()) :: boolean()

Проверяет, принадлежит ли переменная окружению.

in_guard?(env)

Specs

in_guard?(t()) :: boolean()

Возвращает значение, указывающее, находится ли окружение компиляции внутри условия.

in_match?(env)

Specs

in_match?(t()) :: boolean()

Возвращает значение, указывающее, находится ли окружение компиляции внутри блока совпадений.

location(env)

Specs

location(t()) :: keyword()

Возвращает список ключевых слов, содержащий информацию о файле и строке в качестве ключей.

stacktrace(env)

Specs

stacktrace(t()) :: list()

Возвращает стек вызовов окружения.

to_match(env)

Specs

to_match(t()) :: t()

Возвращает Macro.Env в контексте совпадения.

vars(env)

Specs

vars(t()) :: [variable()]

Возвращает список переменных в текущем окружении.

Каждая переменная идентифицируется кортежем из двух элементов, где первый элемент — имя переменной как атом, а второй — её контекст, который может быть атомом или целым числом.

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.10.4/Macro.Env.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API