生成的代码将包含:
passed_args = [a, b] |> Enum.map(&inspect/1) |> Enum.join(",")
上面这段会按预期工作, 但如果一个参数是匿名变量(_),...那么我们将生成以下代码:
passed_args = [_, 0] |> Enum.map(&inspect/1) |> Enum.join(",")
这显然是不正确的, 因此我们得到了未绑定变量错误...那么解决方案是什么呢? 我们不应该对输入参数做任何假设. 相反, 我们应该将每个参数放入宏生成的专用变量中....最后, 在推导式的末尾, 我们返回一个元组, 该元组由临时的名称和 quoted 的完整模式组成 - (例如 _ = arg1, 或 0 = arg2)....我们在这个 lambda 里做的实际上是一个模式匹配, 我们在寻找 {fun_name, context, args}.