0

Phoenix アプリケーションからコンソールを使用する場合はiex、次のようになります。

iex -S mix phx.server

またはSystemなどの関数を呼び出すことができないようです。これは、名前空間をモジュールの前に強制するためです。その名前空間を持つモジュールが存在しないため、エラーが発生します。System.stop(1)System.halt(1)

** (UndefinedFunctionError) function MyApp.SomeNamespace.System.stop/1 is undefined or private

このコア モジュールの先頭に名前空間を追加するのはなぜですか? のようなモジュールではこのエラーが発生するのに、 、、またはSystemのようなモジュールでは発生しないのはなぜですか?EnumListMap

また、iexアプリケーション ソースの外部で使用するとSystem.any_function、期待どおりに呼び出すことができます。

さらに調べてみると、 を呼び出すことで動作させることができますElixir.System.stop/1Systemモジュールの先頭Elixir.に を付ける必要があるのに、他の Elixir モジュールでは必要がないのはなぜですか?

アプリケーション コード内で、エイリアスや名前空間を必要とせずにSystem.backtraceor などを呼び出します。System.get_envまた、アプリケーションで名前が付けられたモジュールもありませんSystem(つまり、モジュールが定義されていないMyapp.Systemか、類似したモジュールが定義されていません)。

4

1 に答える 1