模块是在单个文件中以单个名称重新组合的一组函数。此外,Erlang中的所有函数都必须在模块中定义。
大多数基本功能,如算术、逻辑和布尔运算符已经可用,因为默认模块是在程序运行时加载的。您将要使用的模块中定义的每个其他函数都需要使用 Module: Function (Arguments) 的形式来调用。
使用模块,可以声明两种类型的内容:函数和属性。属性是描述模块本身的元数据,比如它的名称、应该对外界可见的函数、代码的作者等等。这种元数据很有用,因为它向编译器提示它应该如何完成它的工作,还因为它允许人们从编译后的代码中检索有用的信息,而不必查阅源代码。
函数声明的语法如下 :
-module(modulename)
这里,modulename 是模块的名称。这必须在模块代码的第一行。下面的程序显示了一个叫 helloworld 模块的一个实例。
-module(helloworld). -export([start/0]). start() -> io:fwrite("Hello World").
上面的代码的输出结果是 -
Hello World
模块属性定义模块的特定属性,模块属性由标记和值组成。
属性的一般语法是 -
-Tag(Value)
下面的实例程序是用来演示模块属性如何使用 -
-module(helloworld). -author("TutorialPoint"). -version("1.0"). -export([start/0]). start() -> io:fwrite("Hello World").
以上程序定义2个自定义属性:author 和 version,分别用来表示该程序的作者和版本号。
上面的代码的输出结果是 -
Hello World
预先内置属性
Erlang 有可连接到模块的某些预先内置构建的属性,让我们来看看。
导出属性将使用函数和参数数量列表导出到其他模块。它将定义模块接口。我们在前面的实例中已经看到了这一点。
export([FunctionName1/FunctionArity1,.,FunctionNameN/FunctionArityN])
在这里,
FunctionName ? 这是程序中的函数名称;
FunctionArity ? 这是与函数相关联的参数数目;
-module(helloworld). -author("TutorialPoint"). -version("1.0"). -export([start/0]). start() -> io:fwrite("Hello World").
上面的代码的输出结果是 -
Hello World
导入属性用于从另一模块导入函数以将其在本地使用
-import (modulename , [functionname/parameter]).
在这里,
Modulename ? 这是需要导入的模块的名称
functionname/parameter ? 这是在模块中需要导入的函数
-module(helloworld). -import(io,[fwrite/1]). -export([start/0]). start() -> fwrite("Hello, world!\n").
在上面的代码中,我们使用的是 import 这个关键字来导入库 “io”,指定导入 fwrite 函数。所以,现在每当调用fwrite函数,不必每次都要带上模块的名称。
上面的代码的输出结果是 -
Hello, world!