这是 Elixir 中的宏系列的第二篇. 上一次我们讨论了编译过程和 Elixir AST, 最后讲了一个基本的宏的例子 trace. 今天, 我们会更详细地讲解宏的机制....defcall my_request(...), do: reply(result)
...
end
如果你对 GenServer 很熟悉, 那么你知道一个 call 的结果必须是 {:reply,...}, b: {:y, [], Elixir}]
在第一个例子中, 你可以看到输入的关键词列表完全没变....因为在宏代码中, 您可以很容易地从关键字列表中获取所需要的选项, 而不需要分析一些令人费解的AST....使用模块
观察上述代码, 你可以看到 match/2 的胶水代码存在于客户端模块中. 这肯定算不上完美, 因为每个客户端都必须提供对这个函数的正确实现, 而且必须调用 do_match 函数.