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 Code.eval_quoted用法及代码示例
- Elixir Code.ensure_compiled用法及代码示例
- Elixir Code.ensure_loaded?用法及代码示例
- Elixir Code.ensure_loaded用法及代码示例
- Elixir Code.prepend_path用法及代码示例
- Elixir Code.compiler_options用法及代码示例
- Elixir Code.quoted_to_algebra用法及代码示例
- Elixir Code.put_compiler_option用法及代码示例
- Elixir Code.format_string!用法及代码示例
- Elixir Code.required_files用法及代码示例
- Elixir Code.get_compiler_option用法及代码示例
- Elixir Code.Fragment.cursor_context用法及代码示例
- Elixir Code.available_compiler_options用法及代码示例
- Elixir Code.require_file用法及代码示例
- Elixir Code.Fragment.container_cursor_to_quoted用法及代码示例
- Elixir Code.Fragment.surround_context用法及代码示例
- Elixir Code.delete_path用法及代码示例
- Elixir Code.append_path用法及代码示例
- Elixir Code.unrequire_files用法及代码示例
- Elixir Code.fetch_docs用法及代码示例
- Elixir Code.string_to_quoted_with_comments用法及代码示例
- Elixir Code用法及代码示例
- Elixir Config.config_env用法及代码示例
- Elixir Config.config用法及代码示例
- Elixir Config.Reader用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Code.eval_string(string, binding \\ [], opts \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。