gpt4 book ai didi

elixir - 在 Elixir 中实现行为的所有模块的列表

转载 作者:行者123 更新时间:2023-12-01 05:02:26 24 4
gpt4 key购买 nike

获取所有实现行为的模块列表的最短方法是什么?

例如

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

我想得到一个列表 [A,B] .我尝试加载所有模块,然后使用关键属性 behaviour 进行过滤但我认为它会非常缓慢。还有其他更好的方法吗?

最佳答案

不,没有更好的办法。行为不会以任何方式进行索引,因为它们是用于检查是否已定义所有必需的回调函数的编译时功能。所以像这样的东西是最好的:

for {module, _} <- :code.all_loaded(),
X in (module.module_info(:attributes)[:behaviour] || []) do
module
end

关于elixir - 在 Elixir 中实现行为的所有模块的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53630668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com