Функция ERLANG, которая похожа на цикл while while (true)

pg_restore --create --exit-on-error --verbose --username=postgres -h localhost --dbname=my_db_name <backup_file>

0
задан legoscia 18 January 2019 в 09:40
поделиться

1 ответ

То, что вы будете делать с циклами в других языках, выполняется с помощью рекурсивных вызовов функций в Erlang. Так что попробуйте что-то вроде этого:

run_forever() ->
    Output = os:cmd("curl -v -k -X POST 'https://localhost:8243/raspberrypi/1.0.0/device/vf98e6a7atyp/bulb?state=on' -H 'accept: application/json' -H 'Authorization: Bearer 38180797-3181-3839-900d-bdaf259f056a'"),
    io:format("Output from command:~n~s~n", [Output]),
    %% Don't want to repeat too quickly!  Sleep for five seconds
    timer:sleep(5000),
    run_forever().

Итак, эта функция что-то делает, а затем вызывает себя в конце. В некоторых других языках вы бы беспокоились о бесконечном росте стека вызовов, но в Erlang есть нечто, называемое «оптимизация хвостового вызова», что означает, что если последнее, что делает функция, это вызывает другую функцию (возможно, саму себя), то стек фрейм текущей функции просто заменяется на фрейм вызываемой функции, а размер стека остается неизменным.

0
ответ дан legoscia 18 January 2019 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: