宏参数
你要记住, 宏本质上是在扩展阶段被导入的 Elixir 函数, 然后生成最终的 AST. 宏的特别之处在于它所接受的参数都是quoted 的....此外, 二元元组和列表会在被引用(quoted)时保持它们的结构....(quoted)不会保留它的形状:
iex(6)> quote do {1,2,3} end
{:{}, [], [1, 2, 3]}
由于列表和二元元组在被引用时能保留结构, 所以关键词列表(keywords...}, b: {:y, [], Elixir}]
在第一个例子中, 你可以看到输入的关键词列表完全没变....因为在宏代码中, 您可以很容易地从关键字列表中获取所需要的选项, 而不需要分析一些令人费解的AST.