【发布时间】:2017-01-23 10:12:01
【问题描述】:
我目前正在研究一些有趣的长生不老药宏。我有一个这样的模块:
defmodule MapUtils do
@handlers "I don't want you"
defmacro __using__(_) do
quote do
import MapUtils
Module.register_attribute __MODULE__, :handlers, accumulate: true
@handlers "I want you"
end
end
defmacro test do
IO.inspect @handlers
quote do
IO.inspect(@handlers)
end
end
end
defmodule Test do
use MapUtils
def testowa do
MapUtils.test
end
end
Test.testowa
产生这样的结果:
"I don't want you"
["I want you"]
我想从引用块之外的调用者模块访问@handlers,以根据它的内容生成一些代码。据我了解,首先检查正在执行,其次正在转换为 AST 并在不同的上下文中执行。
有没有办法在编译时从调用者模块访问该@handlers?
【问题讨论】:
标签: macros metaprogramming elixir