Hello World

在 Erlang 中编写 hello world 应用程序时,你需要了解两件事:

  1. 源代码使用你选择的文本编辑器以 erlang 编程语言编写
  2. 然后在 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,这又是我们的函数返回的。