当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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 \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。