模塊是在單個(gè)文件中以單個(gè)名稱重新組合的一組函數(shù)。此外,Erlang中的所有函數(shù)都必須在模塊中定義。
大多數(shù)基本功能,如算術(shù)、邏輯和布爾運(yùn)算符已經(jīng)可用,因?yàn)槟J(rèn)模塊是在程序運(yùn)行時(shí)加載的。您將要使用的模塊中定義的每個(gè)其他函數(shù)都需要使用 Module: Function (Arguments) 的形式來調(diào)用。
使用模塊,可以聲明兩種類型的內(nèi)容:函數(shù)和屬性。屬性是描述模塊本身的元數(shù)據(jù),比如它的名稱、應(yīng)該對外界可見的函數(shù)、代碼的作者等等。這種元數(shù)據(jù)很有用,因?yàn)樗蚓幾g器提示它應(yīng)該如何完成它的工作,還因?yàn)樗试S人們從編譯后的代碼中檢索有用的信息,而不必查閱源代碼。
函數(shù)聲明的語法如下 :
-module(modulename)
這里,modulename 是模塊的名稱。這必須在模塊代碼的第一行。下面的程序顯示了一個(gè)叫 helloworld 模塊的一個(gè)實(shí)例。
-module(helloworld). -export([start/0]). start() -> io:fwrite("Hello World").
上面的代碼的輸出結(jié)果是 -
Hello World
模塊屬性定義模塊的特定屬性,模塊屬性由標(biāo)記和值組成。
屬性的一般語法是 -
-Tag(Value)
下面的實(shí)例程序是用來演示模塊屬性如何使用 -
-module(helloworld). -author("TutorialPoint"). -version("1.0"). -export([start/0]). start() -> io:fwrite("Hello World").
以上程序定義2個(gè)自定義屬性:author 和 version,分別用來表示該程序的作者和版本號。
上面的代碼的輸出結(jié)果是 -
Hello World
預(yù)先內(nèi)置屬性
Erlang 有可連接到模塊的某些預(yù)先內(nèi)置構(gòu)建的屬性,讓我們來看看。
導(dǎo)出屬性將使用函數(shù)和參數(shù)數(shù)量列表導(dǎo)出到其他模塊。它將定義模塊接口。我們在前面的實(shí)例中已經(jīng)看到了這一點(diǎn)。
export([FunctionName1/FunctionArity1,.,FunctionNameN/FunctionArityN])
在這里,
FunctionName ? 這是程序中的函數(shù)名稱;
FunctionArity ? 這是與函數(shù)相關(guān)聯(lián)的參數(shù)數(shù)目;
-module(helloworld). -author("TutorialPoint"). -version("1.0"). -export([start/0]). start() -> io:fwrite("Hello World").
上面的代碼的輸出結(jié)果是 -
Hello World
導(dǎo)入屬性用于從另一模塊導(dǎo)入函數(shù)以將其在本地使用
-import (modulename , [functionname/parameter]).
在這里,
Modulename ? 這是需要導(dǎo)入的模塊的名稱
functionname/parameter ? 這是在模塊中需要導(dǎo)入的函數(shù)
-module(helloworld). -import(io,[fwrite/1]). -export([start/0]). start() -> fwrite("Hello, world!\n").
在上面的代碼中,我們使用的是 import 這個(gè)關(guān)鍵字來導(dǎo)入庫 “io”,指定導(dǎo)入 fwrite 函數(shù)。所以,現(xiàn)在每當(dāng)調(diào)用fwrite函數(shù),不必每次都要帶上模塊的名稱。
上面的代碼的輸出結(jié)果是 -
Hello, world!