erlang中Hello World的正确escript?

时间:2010-11-18 21:18:41

标签: erlang

所以我知道基本的Hello World程序(如输出一个字符串而不是用于生成Erlang的spawn和其他东西),如下所示

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

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

然后我跑了erl

>erl

输入

>c(hello)

然后

>hello

对于escript版本会是这个吗?

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

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

然后

chmod u+x hello

hello是文件名吗?

为什么我不能使用与模块相同的格式? (main / 0和main())?

1 个答案:

答案 0 :(得分:10)

这就是escript系统的工作方式。您的escript必须包含一个函数main/1,供运行时调用。 escript需要一种方法将命令行参数传递给您的函数,并将其作为字符串列表执行,因此需要main函数接受一个参数。

当您构建模块并从shell手动运行时,类似的要求也适用 - 您的模块必须导出您要调用的函数(在您的示例中为start/0)。

事实上,您的示例不正确。您创建并编译模块但从不调用它。评价

 hello.

在shell中只重复原子值hello。要实际调用你的hello world函数,你需要评估:

hello:start().