所以我知道基本的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())?
答案 0 :(得分:10)
这就是escript系统的工作方式。您的escript必须包含一个函数main/1
,供运行时调用。 escript需要一种方法将命令行参数传递给您的函数,并将其作为字符串列表执行,因此需要main
函数接受一个参数。
当您构建模块并从shell手动运行时,类似的要求也适用 - 您的模块必须导出您要调用的函数(在您的示例中为start/0
)。
事实上,您的示例不正确。您创建并编译模块但从不调用它。评价
hello.
在shell中只重复原子值hello
。要实际调用你的hello world函数,你需要评估:
hello:start().