読者です 読者をやめる 読者になる 読者になる

export された関数を内部で呼ぶ際の書き方

erlang

注意: 動的にモジュールを更新する際、動きが変わるので一律にはお勧めできないようです

export されている関数を内部で呼ぶ際は ?MODULE: を付ける、
という習慣が必要ではないのだろうか。理由は単に明示的でわかりやすいから。

ちなみに勝手に推奨しているだけで、何か決まりがある訳じゃありません。

非推奨

-export([spam/0]).

main() ->
  {ok, Value1} = spam(),
  {ok, Value2} = eggs().

spam() ->
  {ok, 10}.

eggs() ->
  {ok, 100}.

推奨

-export([spam/0]).

main() ->
  {ok, Value1} = ?MODULE:spam(),
  {ok, Value2} = eggs().

spam() ->
  {ok, 10}.

eggs() ->
  {ok, 100}.

追記

みかげ先生から突っ込みを頂けた。

モジュールを動的に更新するときにローカル呼び出しとモジュール名付き呼び出しで動作が違うので、モジュール名を手前に付けると意味がかわるので一律ではやめたほうがいいとおもう。

動的に更新する際呼び出しの挙動が違う事を理解していないので、まずはそこからか。