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 | nilcontext_modules()
context_modules() :: [module]export_vars()
export_varsfile()
file() :: binaryfunctions()
functions() :: [{module, [name_arity]}]lexical_tracker()
lexical_tracker() :: pid | nilline()
line() :: non_neg_integerlocal()
local() :: atom | nilmacro_aliases()
macro_aliases() :: [{module, {integer, module}}]macros()
macros() :: [{module, [name_arity]}]match_vars()
match_varsname_arity()
name_arity() :: {atom, arity}prematch_vars()
prematch_varsrequires()
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返回环境堆栈跟踪。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

