带宏的动态标识符

罗西奥·阿尔瓦拉多(Rocio Alvarado)

我正在使用宏,并且想将动态标识符传递给苦艾酒宏enum,希望enum通过设置列表生成不同的。一切都在for理解之中。

我读过这Kernel.apply/3不适用于宏。

  1. 我也尝试过:
   for name <- [:hello, :world] do
       enum  unquote(name) do
          value(:approved)
       end  
   end

结果:

** (ArgumentError) argument error
   :erlang.atom_to_binary({:unquote, [line: 36], [{:name, [line: 36], nil}]}, :utf8)
  1. 我也尝试了不带引号的情况:
   for name <- [:hello, :world] do
      enum name do
        value(:approved)
      end
   end

得到:

** (ArgumentError) argument error
   :erlang.atom_to_binary({:name, [line: 36], nil}, :utf8)

看来我无法取消引用作为宏标识符传递的任何内容enum是否有可能做到这一点?

卡比

有可能的。问题是enum假设第一个参数是原子。

defmodule MacroHelper do

  defmacro enum_wrapper(names, do: block) do
    for name <- names do
      quote do
        enum unquote(name), do: unquote(block)
      end
    end
  end

end

defmodule AbsDemo do

  use Absinthe.Schema.Notation
  import MacroHelper

  enum_wrapper [:hello, :world] do
    value :approved
  end

end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

标识符未在宏中定义

来自分类Dev

标识符未在宏中定义

来自分类Dev

使用动态标识符调用表

来自分类Dev

使用动态标识符调用表

来自分类Dev

宏以创建多个相似的标识符进行测试

来自分类Dev

宏名称必须是一个标识符

来自分类Dev

Clojure是否具有标识符宏?

来自分类Dev

具有宏标识符的FreeRTOS静态数组声明

来自分类Dev

宏替换其参数中的标识符

来自分类Dev

使用简单宏C ++的未声明的标识符错误

来自分类Dev

Xcode 7-宏名称必须是标识符

来自分类Dev

标识符和宏有什么区别?

来自分类Dev

具有动态单元格标识符的UICollectionView

来自分类Dev

动态创建变量时[i]的未声明标识符

来自分类Dev

动态sql:找不到多部分标识符错误

来自分类Dev

使用动态标识符在linq中创建对象数组

来自分类Dev

如何在Swift中动态更改UIBarButton的标识符?

来自分类Dev

预期的标识符

来自分类Dev

预期标识符

来自分类Dev

标识符太长

来自分类Dev

预期的标识符或'('

来自分类Dev

如何在宏内给标识符加上前缀/后缀?

来自分类Dev

警告C4005'标识符':宏重新定义

来自分类Dev

如何在程序宏生成的代码中创建卫生标识符?

来自分类Dev

将属性转换为proc宏派生时的标识符

来自分类Dev

Scala宏类型检查如何将标识符解析为类型?

来自分类Dev

Concat(##)将offsetof宏的结果分配给标识符?

来自分类Dev

如何测试是否定义了只能通过#define宏访问的标识符?

来自分类Dev

如何测试宏中的标识符是否以下划线开头?