【发布时间】:2016-12-04 09:59:15
【问题描述】:
这是常见的灵丹妙药:
defmodule Fizz do
defmacro asdf, do: IO.puts("asdf")
end
defmodule Buzz do
require Fizz
Fizz.asdf
end
但是,尽管您可以在相同的上下文中引用宏,例如:
defmodule Fizz do
# ...
defmacro asdf_qwer, do: asdf && IO.puts("qwer")
end
...您不能在定义宏的同一模块的主体中引用宏:
defmodule Fizz do
defmacro asdf, do: IO.puts("asdf")
asdf
end
这引发了undefined function asdf/0。
这个“问题”有解决方法吗?有时我可能想使用宏从我正在处理的模块中删除一些样板,并且该宏的功能可能足够具体,以至于不能将其放入另一个模块中。
【问题讨论】:
标签: macros metaprogramming elixir