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 \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
