私は同じモジュールについての知識に依存しなければならない一連のマクロを書こうとしているので、このモジュールを各関数に明示的に渡すことを避けようとしています(実際にはだから、私は言語を学んでいるので、私はすべての可能性を探そうとしている!)。モジュールを文字列やシンボルで動的にアクセスできますか?
だから私は(目標はSomeOtherModule
にアクセスし、または生成foo
関数の内部SomeOtherModule.foo
を呼び出すことがある。)書いて
defmodule MacrosUser do
use MyMacros, SomeOtherModule
end
defmodule MyMacros do
defmacro __using__(opts) do
{:__aliases__, _, module_path} = opts
quote do
def foo do
module_path
|> Enum.join(".")
|> apply(:foo, [])
end
end
end
end
しかし、これは明らかにapply/3
として機能していないモジュールではなく、文字列を期待またはモジュールの名前のシンボル表現。
基本的に、タイトルには、特定の文字列や記号に対して、対応するモジュールにアクセスしたり、そのモジュールの関数を呼び出すような方法を探しています。
また、__MODULE__
を介して現在のモジュールにアクセスすることは可能ですが、現在のモジュールだけでなく、既存のモジュールにアクセスする方法も探しています。
「MyMacros」、「__MODULE__ == MyMacros ==: "Elixir.MyMacros"」という文脈の中にあるとき。 –
はい、わかっています。この例では、 'SomeOtherModule'にアクセスして' __using__'フックに渡す方法を探していました。私はおそらく質問を更新する必要があります。 – user2205259