0
モジュールの名前を文字列として渡してモジュールのメソッドを呼び出すにはどうすればよいですか?私はapplyを使う方法を知っています。文字列であるモジュールの名前を使用するにはどうすればよいですか?エリクシールでapply(String.t .....)を呼び出す
モジュールの名前を文字列として渡してモジュールのメソッドを呼び出すにはどうすればよいですか?私はapplyを使う方法を知っています。文字列であるモジュールの名前を使用するにはどうすればよいですか?エリクシールでapply(String.t .....)を呼び出す
文字列をアトムに変換する必要があります。すべてのエリクサーモジュールエリクサーモジュールを示す、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
だけ明確にする - 私はあなたが 'String.to_atom(必要はないと思います"Elixir。" <> name) '、モジュール名はこの形式に変換されます。 –
@PawełDawczak私は私が続くのかどうかはわかりません。モジュール名はですが、 'String.to_atom(" M ")'は本質的にコンパイラによって処理され、 'Elixir.M'に変換された' M'ではなく 'M'を返します。ここにコンパイラはありません。 – mudasobwa
私はあなたがこれをする必要はないと思っていました: 'apply(String.to_atom(" Elixir。 "<> name)、:foo、[])' M::foo、[]) 'のように:' apply(Kernel、:+、[1,2]) #=> 3' –