Hello World
在 Erlang 中编写 hello world 应用程序时,你需要了解两件事:
- 源代码使用你选择的文本编辑器以 erlang 编程语言编写
- 然后在 erlang 虚拟机中执行该应用程序。在这个例子中,我们将通过 erlang shell 与 erlang VM 进行交互。
首先是应用程序源代码:
创建一个包含以下内容的新文件 hello.erl:
-module(hello).
-export([hello_world/0]).
hello_world() ->
io:format("Hello, World!~n", []).
让我们快速看看这意味着什么:
-module(hello).所有 erlang 函数都存在于模块中。然后使用模块构建应用程序,这是一组模块。第一行是识别这个模块,即 hello 。可以将模块与 Java 的包进行比较 **-export([hello_world/0]).告诉编译器哪些函数变为公共(与 OO 语言相比),以及相关函数的 arity 。arity 是函数所使用的参数数量。因为在 erlang 中,具有 1 个参数的函数被视为与具有 2 个参数的函数不同的函数,即使名称可能完全相同。也就是说,hello_world/0是一个完全不同于hello_world/1的功能。hello_world()这是函数的名称。->表示转换到函数的实现(正文)。这可以理解为“hello_world()定义为……”。请注意,hello_world()(无参数)由 VM 中的hello_world/0识别,hello_world(Some_Arg)为hello_world/1。io:format("Hello, World!~n", [])从模块io,调用函数format/2函数,这是标准输出的函数。~n是一个格式说明符,表示打印一个新行。[]是由输出字符串中的格式说明符指示的要打印的变量列表,在这种情况下没有任何内容。- 所有 erlang 语句必须以
.(点)结尾。
在 Erlang 中,返回函数中最后一个语句的结果。
现在,让我们运行我们的应用程序:
从与文件 hello.erl 文件相同的目录启动 erlang shell:
$ erl
你应该得到一个看起来像这样的提示(你的版本可能会有所不同):
Eshell V8.0 (abort with ^G)
1>
现在输入以下命令:
1> c(hello).
{ok,hello}
2> hello:hello_world().
Hello, World!
ok
让我们逐个浏览每一行:
c(hello)- 此命令在原子hello上调用函数c。这有效地告诉 Erlang 找到文件hello.erl,将其编译成一个模块(将在目录中生成一个名为hello.beam的文件)并将其加载到环境中。{ok, hello}- 这是调用上面的函数c的结果。它是一个包含原子ok和原子hello的元组。Erlang 函数通常返回{ok, Something}或{error, Reason}。hello:hello_world()- 它从模块hello调用函数hello_world()。Hello, World!- 这是我们的功能打印。ok- 这是我们的功能返回的。由于 Erlang 是一个函数式编程语言,每一个函数返回的东西。在我们的例子中,即使我们没有在hello_world()中返回任何内容,该函数中的最后一个调用是io:format(...),该函数返回ok,这又是我们的函数返回的。