Это зависит от того, что вам действительно нужно сделать.
Существуют функции, которые можно рассматривать как «одноразовые», то есть они определены один раз для выполнения теста, а затем вы продолжаете. В таких случаях используется синтаксис fun
. Хотя это немного громоздко, это может быть использовано, чтобы выразить вещи быстро и эффективно. Например:
1> Sum = fun(X, Y) -> X + Y end.
#Fun<erl_eval.12.128620087>
2> Sum(1, 2).
3
определяет аноним fun
, который связан с переменной (или меткой) Sum
. Между тем, следующее определяет с именем fun
, называемый F
, который используется для создания нового процесса, PID (<0.80.0>
) которого связан с Pid
. Обратите внимание, что F
вызывается хвостовым рекурсивным способом во втором предложении receive
, что позволяет процессу зацикливаться, пока ему не будет отправлено сообщение stop
.
3> Pid = spawn(fun F() -> receive stop -> io:format("Stopped~n"); Msg -> io:format("Got: ~p~n", [Msg]), F() end end).
<0.80.0>
4> Pid ! hello.
hello
Got: hello
5> Pid ! stop.
Stopped
stop
6>
Однако вам может потребоваться определить некоторые служебные функции, которые вы собираетесь использовать снова и снова в оболочке Erlang. В этом случае я бы предложил использовать файл user_default.erl
вместе с .erlang
для автоматической загрузки этих пользовательских служебных функций в оболочку Erlang, как только она будет запущена. Например, вы можете написать функцию, которая компилирует все файлы Erlang, находящиеся в текущем каталоге.
Я написал небольшое руководство о том, как это сделать, по этой ссылке на GitHub . Вы можете найти это полезным и поучительным.