當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Code.eval_quoted用法及代碼示例


Elixir語言中 Code.eval_quoted 相關用法介紹如下。

用法:

eval_quoted(quoted, binding \\ [], opts \\ [])
@spec eval_quoted(Macro.t(), binding(), Macro.Env.t() | keyword()) ::
  {term(), binding()}

評估引用的內容。

警告:在宏中調用此函數被認為是不好的做法,因為它將嘗試在編譯時評估運行時值。宏參數通常通過將它們取消引用轉換為返回的帶引號的表達式(而不是評估)。

有關 bindingopts 的說明,請參見 eval_string/3

例子

iex> contents = quote(do: var!(a) + var!(b))
iex> {result, binding} = Code.eval_quoted(contents, [a: 1, b: 2], file: __ENV__.file, line: __ENV__.line)
iex> result
3
iex> Enum.sort(binding)
[a: 1, b: 2]

為方便起見,您可以將 __ENV__/0 作為 opts 參數傳遞,所有選項都將從當前環境中自動提取:

iex> contents = quote(do: var!(a) + var!(b))
iex> {result, binding} = Code.eval_quoted(contents, [a: 1, b: 2], __ENV__)
iex> result
3
iex> Enum.sort(binding)
[a: 1, b: 2]

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Code.eval_quoted(quoted, binding \\ [], opts \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。