defcall sum(x, y), do: reply(x+y)
end
在以上两个例子中, 我们使用到了一些自定义的宏, 这些宏会在编译时 (compile time) 都转化成其它的代码....进入运行时 (run-time) 后, 代码就已经定型了, 代码中不会有元编程结构在运行.
创建 AST 片段
什么是 Elixir AST?...要生成某段代码的 AST, 可以使用 quote:
iex(1)> quoted = quote do 1 + 2 end
{:+, [context: Elixir, import: Kernel],...我们通常对输入 AST 的内容和结构不感兴趣, 相反, 我们使用 quote 生成和组合输入片段, 并生成经过修饰的代码.
Unquoting
unquote 在这里出现了....然后我们使用某种格式来打印它们(借助Macro.to_string/1), 最后返回结果.
展开一个 AST
在 Shell 观察其是如何连接起来是很容易的.