Elixir语言中 Macro.escape 相关用法介绍如下。
用法:
escape(expr, opts \\ [])
@spec escape(
term(),
keyword()
) :: t()
递归地转义一个值,以便将其插入到语法树中。
例子
iex> Macro.escape(:foo)
:foo
iex> Macro.escape({:a, :b, :c})
{:{}, [], [:a, :b, :c]}
iex> Macro.escape({:unquote, [], [1]}, unquote: true)
1
选项
-
:unquote- 当为 true 时,此函数使和unquote/1语句未转义,有效地取消对转义内容的引用。此选项仅在转义可能包含引用片段的 AST 时有用。默认为假。unquote_splicing/1 -
:prune_metadata- 如果为真,则从转义的 AST 节点中删除元数据。请注意,此选项会更改转义代码的语义,并且仅应在转义 AST 时使用。默认为假。例如,
存储每个断言的 AST,因此当断言失败时,我们可以向用户显示代码片段。如果没有这个选项,每次编译测试模块时,我们都会得到模块字节码的不同 MD5,因为 AST 包含特定于编译环境的元数据,例如计数器。通过修剪元数据,我们确保模块是确定性的,并减少ExUnit需要保留的数据量。仅保留最少量的元数据,例如ExUnit:line和:no_parens。
与 Kernel.SpecialForms.quote/2 的比较
Kernel.SpecialForms.quote/2 函数有时会与 escape/2 混淆,因为上述示例对两者的行为相同。当要转义的值存储在变量中时,最能说明关键区别。Kernel.SpecialForms.quote/2
iex> Macro.escape({:a, :b, :c})
{:{}, [], [:a, :b, :c]}
iex> quote do: {:a, :b, :c}
{:{}, [], [:a, :b, :c]}
iex> value = {:a, :b, :c}
iex> Macro.escape(value)
{:{}, [], [:a, :b, :c]}
iex> quote do: value
{:value, [], __MODULE__}
iex> value = {:a, :b, :c}
iex> quote do: unquote(value)
{:a, :b, :c}
用于转义escape/2 values(直接传递或变量绑定),而 为表达式生成语法树。Kernel.SpecialForms.quote/2
相关用法
- Elixir Macro.expand_once用法及代码示例
- Elixir Macro.Env.fetch_alias用法及代码示例
- Elixir Macro.prewalk用法及代码示例
- Elixir Macro.generate_unique_arguments用法及代码示例
- Elixir Macro.quoted_literal?用法及代码示例
- Elixir Macro.Env.required?用法及代码示例
- Elixir Macro.validate用法及代码示例
- Elixir Macro.Env.prepend_tracer用法及代码示例
- Elixir Macro.camelize用法及代码示例
- Elixir Macro.operator?用法及代码示例
- Elixir Macro.var用法及代码示例
- Elixir Macro.unescape_string用法及代码示例
- Elixir Macro.unique_var用法及代码示例
- Elixir Macro.to_string用法及代码示例
- Elixir Macro.Env.lookup_import用法及代码示例
- Elixir Macro.prewalker用法及代码示例
- Elixir Macro.postwalker用法及代码示例
- Elixir Macro.underscore用法及代码示例
- Elixir Macro.generate_arguments用法及代码示例
- Elixir Macro.Env.has_var?用法及代码示例
- Elixir Macro.decompose_call用法及代码示例
- Elixir Macro.Env用法及代码示例
- Elixir Macro.update_meta用法及代码示例
- Elixir Macro.unpipe用法及代码示例
- Elixir Macro用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Macro.escape(expr, opts \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
