Правильный сценарий для Hello World на эрланге? - PullRequest
4 голосов
/ 19 ноября 2010

Итак, я знаю, что основная программа Hello World (например, для вывода строки, не предназначенной для обучения на эрланге с помощью spawn и других программ) выглядит следующим образом

-module(hello).
-export([start/0]).

start() ->
  io:format("Hello, World!").

Тогда я запускаю erl

>erl

тип

>c(hello)

, а затем

>hello

Для версии сценария это будет?

#!/usr/bin/env escript
-export([main/1]).

main([]) -> io:format("Hello, World!~n").

Тогда

chmod u+x hello

Где привет это имя файла?

Почему я не могу использовать тот же формат, что и модуль? (main / 0 и main ())?

1 Ответ

10 голосов
/ 19 ноября 2010

Так работает система escript. Ваш сценарий должен содержать функцию main/1 для вызова времени выполнения. Эскрипту нужен способ передать аргументы командной строки в вашу функцию, и он делает это в виде списка строк, поэтому для вашей main функции требуется один аргумент.

Когда вы собираете модуль и запускаете его вручную из оболочки, применяется аналогичное требование - ваш модуль должен экспортировать функцию, которую вы хотите вызвать (start/0 в вашем примере).

На самом деле, ваш пример неверен. Вы создаете и компилируете модуль, но никогда не вызываете его. Оценка

 hello.

В оболочке просто повторяется значение атома hello. Чтобы на самом деле вызвать функцию hello world, вам нужно оценить:

hello:start().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...