【问题标题】:Cant use plug in using macro elixir不能使用使用宏药剂的插件
【发布时间】:2017-04-12 16:57:33
【问题描述】:

所以 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,所以我不确定为什么它是未定义的。这里有什么想法吗?

克里斯

【问题讨论】:

    标签: elixir metaprogramming phoenix-framework


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2012-06-10
      相关资源
      最近更新 更多