不能使用插件使用宏长生不老药

Cant use plug in using macro elixir

所以 phoenix 有几个插件我想混入 base_controller.ex 但即

plug :xxx when action in [:xxx]

然而,当我将其添加到 __using__ 宏操作时似乎未定义,即

defmacro __using__(opts) do
  quote do
    use XXX.Web, :controller
    plug :xxx when action in [:xxx]
  end
end

结果:

unknown variable action or cannot invoke local action/0 inside guard

似乎动作来自 use XXX.Web, :controller 所以我不确定为什么它是未定义的。这里有什么想法吗?

克里斯

错误消息可能会更好,但这似乎是由于宏卫生,它在将 action 发送到 plug 宏之前重命名它。我们可以使用 Kernel.var!/1 禁用变量 action 上的卫生。以下对我有用:

quote do
  use XXX.Web, :controller
  plug :xxx when var!(action) in [:xxx]
end