Macro.Env
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()
以获取包含所需导入和别名的结构。
它包含以下字段:
module
-当前模块名称
file
-当前文件名为二进制文件
line
-当前行为整数
function
-元组{atom, integer}
,其中第一个元素是函数名,第二个元素是它的偶然性;nil
如果不在函数内
context
-环境的背景;它可以是nil
%28默认上下文%29,在警卫内部或在匹配内
aliases
-两个元素元组的列表,其中第一个元素是别名名称,三是实际名称。
requires
-所需单元清单
functions
-从每个模块导入的功能列表
macros
-从每个模块导入的宏列表
macro_aliases
-在当前宏中定义的别名列表
context_modules
-在当前情况下定义的模块列表
lexical_tracker
-负责保存用户信息的词汇跟踪器的PID
vars
-保持所有定义变量为{var, context}
下列字段是私有的,不得访问或依赖:
export_vars
-使所有变量在结构%28中导出的列表可以是nil
%29
match_vars
-控制如何处理“新”变量。在匹配中,它是一个包含匹配中所有变量的列表。匹配之外的:warn
或:apply
prematch_vars
-在匹配%28 is之前定义的变量列表nil
当不在比赛中时,%29
摘要
类型
aliases()context()context_modules()export_vars()file()functions()lexical_tracker()line()local()macro_aliases()macros()match_vars()name_arity()prematch_vars()requires()t()vars()
功能
in_guard?(env)
返回编译环境当前是否在保护程序中。
in_match?(env)
返回编译环境当前是否在Match子句中。
location(env)
返回一个关键字列表,其中包含作为键的文件和行信息。
stacktrace(env)
返回环境堆栈跟踪。
类型
aliases()
aliases() :: [{module, module}]
context()
context() :: :match | :guard | nil
context_modules()
context_modules() :: [module]
export_vars()
export_vars
file()
file() :: binary
functions()
functions() :: [{module, [name_arity]}]
lexical_tracker()
lexical_tracker() :: pid | nil
line()
line() :: non_neg_integer
local()
local() :: atom | nil
macro_aliases()
macro_aliases() :: [{module, {integer, module}}]
macros()
macros() :: [{module, [name_arity]}]
match_vars()
match_vars
name_arity()
name_arity() :: {atom, arity}
prematch_vars()
prematch_vars
requires()
requires() :: [module]
t()
t() :: %Macro.Env{module: atom, file: file, line: line, function: name_arity | nil, context: context, requires: requires, aliases: aliases, functions: functions, macros: macros, macro_aliases: aliases, context_modules: context_modules, vars: vars, export_vars: export_vars, match_vars: match_vars, prematch_vars: prematch_vars, lexical_tracker: lexical_tracker}
vars()
vars() :: [{atom, atom | non_neg_integer}]
功能
in_guard?(env)
in_guard?(t) :: boolean
返回编译环境当前是否在保护程序中。
in_match?(env)
in_match?(t) :: boolean
返回编译环境当前是否在Match子句中。
location(env)
location(t) :: keyword
返回一个关键字列表,其中包含作为键的文件和行信息。
stacktrace(env)
stacktrace(t) :: list
返回环境堆栈跟踪。