Создание функций без их экспорта

Я новичок в erlang, и у меня небольшая головная боль в следующем сценарии:

Возьмите этот код:

-module (so).
-export ( [foo/0] ).

bar () ->
    receive 
        die -> ok;
        Msg -> io:format ("I say ~p.~n", [Msg] )
    end.


bar (Name) ->
    receive 
        die -> ok;
        Msg -> io:format ("~s says ~p.~n", [Name, Msg] )
    end.

foo () ->
    Bar = spawn (fun bar/0),
    Bar ! "Hello",
    Bar ! die,
    Baz = spawn (?MODULE, bar, ["Alice"] ), % bar/1 not exported
    Baz ! "Hello",
    Baz ! die.

Процесс порожден с spawn / 1 работает нормально, но второй процесс, порожденный с помощью spawn / 3 , завершается ошибкой, как и ожидалось, потому что я не экспортировал bar / 1 , и поэтому я получаю {undef, [{so , бар, ["Алиса"]}]} . Обе функции spawn, которые принимают список параметров ( spawn / 3 и spawn / 4 ), также принимают имя модуля. Но я не хочу экспортировать bar / 1 , потому что он используется только внутри и не требует вызова извне модуля.

Как я могу создать функцию с аргументами, не экспортируя ее?

13
задан Hyperboreus 2 August 2011 в 21:11
поделиться