2017-11-10 4 views
0

モジュールの名前を文字列として渡してモジュールのメソッドを呼び出すにはどうすればよいですか?私はapplyを使う方法を知っています。文字列であるモジュールの名前を使用するにはどうすればよいですか?エリクシールでapply(String.t .....)を呼び出す

答えて

2

文字列をアトムに変換する必要があります。すべてのエリクサーモジュールエリクサーモジュールを示す、Elixir名前空間(基本的に名前の衝突を防ぐために、)ので、原子に住んで、すべての"Elixir."で始めている:

iex(1)> defmodule M, do: def foo, do: IO.puts "BAR" 
iex(2)> name = "M" 
iex(3)> apply(String.to_atom("Elixir." <> name), :foo, []) 
BAR 
+0

だけ明確にする - 私はあなたが 'String.to_atom(必要はないと思います"Elixir。" <> name) '、モジュール名はこの形式に変換されます。 –

+0

@PawełDawczak私は私が続くのかどうかはわかりません。モジュール名はですが、 'String.to_atom(" M ")'は本質的にコンパイラによって処理され、 'Elixir.M'に変換された' M'ではなく 'M'を返します。ここにコンパイラはありません。 – mudasobwa

+0

私はあなたがこれをする必要はないと思っていました: 'apply(String.to_atom(" Elixir。 "<> name)、:foo、[])' M::foo、[]) 'のように:' apply(Kernel、:+、[1,2]) #=> 3' –

関連する問題