私はエリクシルと関数型プログラミング言語には一般的にはかなり新しいです。エリクシール - モジュールの文字列名によるメソッドの呼び出し
エリクシルでは、モジュール名を文字列として指定して、モジュールで特定の関数を呼び出したいとします。
私はかなり私が欲しいものをしており、作業以下の(非常に悪い)のコードを持っているに:
module_name = elem(elem(Code.eval_file("module.ex", __DIR__), 0), 1)
apply(module_name, :helloWorld, [])
この(私はそれを理解し、少なくともとして)の(コンパイル済み)モジュールをコンパイル現在のディレクトリにmodule.ex
私は2つのタプルの中からモジュール名(Stringではなく、実際にどのデータ型であるか)を抽出し、メソッドhelloWorld
を実行します。それはredefining module Balance
のような警告を表示し
:
は、このコードには二つの問題があります。私は確かにそれが生産で起こることを望んでいません。
AFAIKこのコードは
module.ex
をコンパイルします。しかし、module.exは既にコンパイルされてロードされているので、そのようなことは起こりたくありません。
これらのモジュールのメソッドをファイル名で呼び出す必要はありません。モジュール名もokです。しかし、それは動的でなければならない。コマンドラインに "Book"と入力すると、モジュールが存在するかどうかを確認した後、関数Book.helloWorld
を呼び出す必要があります。
ありがとうございました。
小型ノート:可能な限り、あなたはto_existing_atom使用する必要があります。原子はゴミ収集されません! –
ありがとう!私は、原子がガベージコレクションされていないことは知らなかった。私の答えを編集します。 – lschuermann