gpt4 book ai didi

erlang - Elixir 列出命名空间中的所有模块

转载 作者:行者123 更新时间:2023-12-03 15:25:15 25 4
gpt4 key购买 nike

我正在开发一个 Elixir/Phoenix 应用程序,旨在在我的 UserController 中创建一个用户。 Controller 。有一个/lib/helpers/user_helpers包含许多模块的目录(每个模块在一个单独的文件中)。这些模块都有一个共同的命名空间 UserHelpers.ModuleName .在每个模块中,我都有一个名为 apply 的函数。我想将其应用于用户数据。例如,如果我有以下文件结构:

-lib
-helpers
-user_helpers
-module1
-module2
-...
-moduleN-1
-moduleN

其中每个 module1module2包含函数 apply(user_info)返回 user_info .在我的 UserController我有函数 create(conn, params)我想在其中运行以下内容:
user_data
|> UserHelpers.Module1.create
|> UserHelpers.Module2.create
|> ...
|> UserHelpers.ModuleN-1.create
|> UserHelpers.ModuleN.create

但我不确定如何动态加载 UserHelpers 中的所有模块执行上述操作的文件夹。有什么建议么?

最佳答案

假设您的应用程序名为 :my_app和助手有.ex扩展和/或显式编译到您的应用程序中:

with {:ok, list} <- :application.get_key(:my_app, :modules) do
list
|> Enum.filter(& &1 |> Module.split |> Enum.take(1) == ~w|UserHelpers|)
|> Enum.reduce(user_data, fn m, acc -> apply(m, :create, acc) end)
end
:application.get_key(:my_app, :modules)返回该应用程序已知的模块列表。第二行过滤掉那些不需要的,后一行应用他们的 :create函数到 user_data随后。

您可能想要嵌入 Enum.sort在最后一行之前对模块进行排序以按适当的顺序应用。

关于erlang - Elixir 列出命名空间中的所有模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41733712/

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