quoted + 的操作, 我们知道 + 实际上是一个函数....在我们的例子中, 我们依靠模式匹配将比较表达式的每一边(被 quoted 的)带入相应的变量....首先, 在模式匹配中, 硬编码(hard code) :== 被变量 operator 取代了(第 2 行)....因此, 没有这些 guard 语句, 任何双参数的函数调用都会在我们的宏中结束, 这可能是我们不想要的. 使用这个 guard 语句能将输入限制在已知的二进制运算符中.
有趣的事情发生在第 9 行....所以, 当我们想生成一个二进制操作代码时, 我们需要注入一个正确的 AST, 它(如前所述)与双参数的函数调用相同.