【发布时间】:2018-10-31 02:47:25
【问题描述】:
我有一个名为 Interfaces 的模块:
defmodule Interfaces do
defmacro __using__(module) do
@module unquote(module) |> List.first |> elem(1)
defmacro expose(name) do
IO.inspect params, label: "Expanding macro with: "
IO.inspect @module, label: "I need this !!"
def unquote(name)() do
IO.puts "The function has been created with exposed name"
end
end
end
end
另一个名为 Interfaces.MyModule 的模块:
defmodule Interfaces.MyModule do
use Interfaces, for: Something.DefinedElseWhere
expose :plop
end
但在编译时我得到了
** (CompileError) lib/my_module.ex:6: undefined function expose/1
【问题讨论】:
-
这是什么意思?你已经在一个宏里面了,为什么不直接定义一个常规函数呢?至于实际问题,我不知道这是否应该工作。
-
我编辑了我的例子,所以你会明白这一点,它应该定义一个函数,其名称在
expose参数中传递 -
为什么不直接创建那个宏而不是通过
__using__? -
因为我需要use语句中传递的选项