非常教程

Elixir 1.5参考手册

Macro

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

返回环境堆栈跟踪。

Macro相关

Elixir 1.5

Elixir 基于 Erlang 虚拟机的函数式、面向并行,是一种较好的编程语言。它以 Erlang 为基础,支持分布式、高容错、实时应用程序的开发。

主页 https://elixir-lang.org/
源码 https://github.com/elixir-lang/elixir
版本 1.5
发布版本 1.5.2