gpt4 book ai didi

macros - Elixir 报价 vs 逃脱

转载 作者:行者123 更新时间:2023-12-02 11:44:12 25 4
gpt4 key购买 nike

在 Elixir 中,什么时候应该使用 Macro.escape/1 而不是 quote/1?我看过beginner's guide但这没有帮助。

最佳答案

quote/2返回 abstract syntax tree (AST) 传入的代码块

Macro.escape/2返回传入的 AST。

这是一个例子:

iex(1)> a = %{"apple": 12, "banana": 90}
%{apple: 12, banana: 90}

iex(2)> b = quote do: a
{:a, [], Elixir}

iex(3)> c = Macro.escape(a)
{:%{}, [], [apple: 12, banana: 90]}

quote/2将保留原始变量a,而Macro.escape/2会将 a 的值注入(inject)到返回的 AST 中。

iex(4)> Macro.to_string(b) |> Code.eval_string

warning: variable "a" does not exist and is being
expanded to "a()", please use parentheses to remove
the ambiguity or change the variable name
nofile:1

iex(5)> Macro.to_string(c) |> Code.eval_string
{%{apple: 12, banana: 90}, []}

iex(6)> Macro.to_string(b) |> Code.eval_string([a: "testvalue"])
{"testvalue", [a: "testvalue"]}
<小时/>

为了完整起见:

iex(1)> a = %{"apple": 12, "banana": 90}
%{apple: 12, banana: 90}

iex(3)> Macro.escape(a)
{:%{}, [], [apple: 12, banana: 90]}

iex(2)> quote do: %{"apple": 12, "banana": 90}
{:%{}, [], [apple: 12, banana: 90]}

关于macros - Elixir 报价 vs 逃脱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47804477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com