erlang中Hello World的正确escript?

phw*_*hwd 5 erlang

所以我知道基本的Hello World程序(如输出一个字符串而不是为Erlang设计的字符串学习用spawn和其他东西)如下

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

start() ->
  io:format("Hello, World!").
Run Code Online (Sandbox Code Playgroud)

然后我跑了erl

>erl
Run Code Online (Sandbox Code Playgroud)

类型

>c(hello)
Run Code Online (Sandbox Code Playgroud)

然后

>hello
Run Code Online (Sandbox Code Playgroud)

对于escript版本会是这样吗?

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

main([]) -> io:format("Hello, World!~n").
Run Code Online (Sandbox Code Playgroud)

然后

chmod u+x hello
Run Code Online (Sandbox Code Playgroud)

hello是文件名吗?

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

arc*_*lus 11

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

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

实际上,您的示例是不正确的.您创建并编译模块但从不调用它.评估

 hello.
Run Code Online (Sandbox Code Playgroud)

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

hello:start().
Run Code Online (Sandbox Code Playgroud)