什么是获得实现行为的所有模块列表的最短方法?
例如
defmodule X do
@callback foo()
end
defmodule A do
@behaviour X
def foo() do
"hello"
end
end
defmodule B do
@behaviour X
def foo() do
"world"
end
end
Run Code Online (Sandbox Code Playgroud)
我想得到一个清单[A,B].我尝试加载所有模块,然后使用key属性进行过滤,behaviour但我认为它会非常慢.还有其他更好的方法吗?
不,没有更好的方法.行为不以任何方式编制索引,因为它们是用于检查是否已定义所有必需回调函数的编译时功能.所以像这样的东西就像它得到的一样好:
for {module, _} <- :code.all_loaded(),
X in (module.module_info(:attributes)[:behaviour] || []) do
module
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |