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
unquote_splicing/1
-
:prune_metadata
- 如果为真,则从转义的 AST 节点中删除元数据。请注意,此选项会更改转义代码的语义,并且仅应在转义 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 \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。