你可以依赖没有文档格式的AST 来快速完成许多嵌套的 quote/unquoted 调用, 以及奇怪的模式匹配....quoted + 的操作, 我们知道 + 实际上是一个函数....}, {:b, [if_undefined: :apply], Elixir}]}
所以我们的结构本质上是 {:==, context, [quoted_lhs, quoted_rhs]}....我还引入(实际上, 是从 Elixir 源代码中复制粘贴了)guard 语句指定了宏能处理的运算符集(第 3 行). 这个检查有一个特殊原因....还记得我之前提到的, quoted a + b(或任何其它的二进制操作)的形状等同于引用 fun(a, b).