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


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