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
,这又是我们的函数返回的。