【发布时间】:2017-06-28 16:52:48
【问题描述】:
我正在尝试在编译时跟踪 use 另一个模块的所有模块,并在运行时获取所有这些模块的列表:
defmodule BaseModule do
defmacro __using__(_) do
quote do
# common behaviour
end
end
end
defmodule A do
use BaseModule
end
defmodule B do
use BaseModule
end
defmodule C do
use BaseModule
end
并在运行时通过调用类似这样的方法获取它们:
BaseModule.children()
#=> [A, B, C]
我一直在尝试找到一种方法来实现这一点,但仍然完全不知道如何去做。通过this thread on the elixir-lang mailing list、@josevalim 建议使用Protocols 来执行此操作。但是在为此苦苦挣扎了大约一个小时后,我也无法让它与协议一起使用。
我也一直在研究 Registry 模块,看看我是否可以使用它来完成此任务,但它看起来主要是为处理进程而设计的。
任何帮助将不胜感激。提前致谢!
【问题讨论】:
-
您的使用宏是否将行为包含到目标模块中。需要对目标模块产生一些影响,因为
__using__宏可能不会返回任何效果并且无法检测到
标签: elixir