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


Elixir Code.eval_string用法及代码示例


Elixir语言中 Code.eval_string 相关用法介绍如下。

用法:

eval_string(string, binding \\ [], opts \\ [])
@spec eval_string(List.Chars.t(), binding(), Macro.Env.t() | keyword()) ::
  {term(), binding()}

评估 string 给出的内容。

binding 参数是变量绑定列表。 opts 参数是环境选项的关键字列表。

警告:string 可以是任何 Elixir 代码,并将以与 Erlang VM 相同的权限执行:这意味着此类代码可能会危及机器(例如通过执行系统命令)。不要将 eval_string/3 与不受信任的输入(例如来自网络的字符串)一起使用。

选项

选项可以是:

  • :file - 评估中要考虑的文件

  • :line - 脚本开始的行

此外,您还可以将环境作为第二个参数传递,因此评估发生在该环境中。但是,如果评估的代码需要或编译另一个文件,则赋予此函数的环境将不适用于所述文件。

返回形式为 {value, binding} 的元组,其中 value 是从评估 string 中返回的值。如果在评估 string 时发生错误,将引发异常。

binding 是在评估 string 之后包含所有变量绑定的列表。绑定键通常是原子,但它们可能是在不同上下文中定义的变量的元组。

例子

iex> {result, binding} = Code.eval_string("a + b", [a: 1, b: 2], file: __ENV__.file, line: __ENV__.line)
iex> result
3
iex> Enum.sort(binding)
[a: 1, b: 2]

iex> {result, binding} = Code.eval_string("c = a + b", [a: 1, b: 2], __ENV__)
iex> result
3
iex> Enum.sort(binding)
[a: 1, b: 2, c: 3]

iex> {result, binding} = Code.eval_string("a = a + b", [a: 1, b: 2])
iex> result
3
iex> Enum.sort(binding)
[a: 3, b: 2]

为方便起见,您可以将 __ENV__/0 作为opts 参数传递,并且当前环境中定义的所有导入、要求和别名都将自动继承:

iex> {result, binding} = Code.eval_string("a + b", [a: 1, b: 2], __ENV__)
iex> result
3
iex> Enum.sort(binding)
[a: 1, b: 2]

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Code.eval_string(string, binding \\ [], opts \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。