首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Macro.Env

一个保存编译时环境信息的结构。

当前环境可以随时访问__ENV__/0。在宏内部,调用者环境可以被访问为__CALLER__/0

Macro.Env不得手动修改实例。如果您需要创建要传递给的自定义环境Code.eval_quoted/3,请使用以下技巧:

代码语言:javascript
复制
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()

代码语言:javascript
复制
aliases() :: [{module, module}]

context()

代码语言:javascript
复制
context() :: :match | :guard | nil

context_modules()

代码语言:javascript
复制
context_modules() :: [module]

export_vars()

代码语言:javascript
复制
export_vars

file()

代码语言:javascript
复制
file() :: binary

functions()

代码语言:javascript
复制
functions() :: [{module, [name_arity]}]

lexical_tracker()

代码语言:javascript
复制
lexical_tracker() :: pid | nil

line()

代码语言:javascript
复制
line() :: non_neg_integer

local()

代码语言:javascript
复制
local() :: atom | nil

macro_aliases()

代码语言:javascript
复制
macro_aliases() :: [{module, {integer, module}}]

macros()

代码语言:javascript
复制
macros() :: [{module, [name_arity]}]

match_vars()

代码语言:javascript
复制
match_vars

name_arity()

代码语言:javascript
复制
name_arity() :: {atom, arity}

prematch_vars()

代码语言:javascript
复制
prematch_vars

requires()

代码语言:javascript
复制
requires() :: [module]

t()

代码语言:javascript
复制
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()

代码语言:javascript
复制
vars() :: [{atom, atom | non_neg_integer}]

in_guard?(env)

代码语言:javascript
复制
in_guard?(t) :: boolean

返回编译环境当前是否在保护程序中。

in_match?(env)

代码语言:javascript
复制
in_match?(t) :: boolean

返回编译环境当前是否在Match子句中。

location(env)

代码语言:javascript
复制
location(t) :: keyword

返回一个关键字列表,其中包含作为键的文件和行信息。

stacktrace(env)

代码语言:javascript
复制
stacktrace(t) :: list

返回环境堆栈跟踪。

扫码关注腾讯云开发者

领取腾讯云代金券