私はUserController
コントローラでユーザーを作成するためのElixir/Phoenixアプリケーションを開発中です。 /lib/helpers/user_helpers
ディレクトリには、いくつかのモジュール(それぞれ別々のファイルにあります)があります。これらのモジュールはすべて共通の名前空間UserHelpers.ModuleName
を持っています。これらのモジュールのそれぞれに私はユーザデータに適用したいapply
という機能を持っています。たとえば、私は次のファイル構造がある場合:module1
とmodule2
のそれぞれがuser_info
を返す関数apply(user_info)
が含まれていElixirすべてのモジュールをネームスペースにリストする
-lib
-helpers
-user_helpers
-module1
-module2
-...
-moduleN-1
-moduleN
を。私のUserController
では、私は次のことを実行したい機能create(conn, params)
あります
user_data
|> UserHelpers.Module1.create
|> UserHelpers.Module2.create
|> ...
|> UserHelpers.ModuleN-1.create
|> UserHelpers.ModuleN.create
をしかし、私は動的に上記を行うためにUserHelpers
フォルダ内のすべてのモジュールをロードする方法がわかりませんよ。助言がありますか?
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)
は、そのアプリケーションに知られている、モジュールのリストを返します:アプリケーションが:my_app
と呼ばれ、ヘルパーは.ex
拡張子を持っている、および/または明示的に、アプリケーションにコンパイルされていることを、仮定し
これらのモジュールはあなたのアプリにコンパイルされていますか(つまり、それらは '.ex'ファイルであり、' .exs'ではありません)? – Dogbert
そして、どのような順序でこれらを呼びたいのですか?モジュール名は数字で終わりますか? N> 9です(この場合、 'Enum.sort'で十分ではありません)。 – Dogbert