模塊是在一個(gè)單一的文件重新組合的函數(shù),在一個(gè)單一的名稱。此外,在 Erlang 所有函數(shù)必須在模塊定義。
大部分像算術(shù),邏輯和布爾操作符的基本函數(shù)已經(jīng) Erlang 內(nèi)部集成提供并且可以直接調(diào)用,因?yàn)樵谶\(yùn)行程序時(shí)的默認(rèn)模塊被加載。一個(gè)模塊中使用定義的所有其他函數(shù)需要使用形式 Module:Function (參數(shù)) 來(lái)調(diào)用。
定義模塊
有了模塊,我們可以聲明兩個(gè)東西:函數(shù)和屬性。屬性就類似它的名稱,描述模塊本身的元數(shù)據(jù),這應(yīng)該是明顯的向外界的功能,如:代碼作者等等。這種元數(shù)據(jù)是非常有用的,因?yàn)樗o編譯器提示讓它知道怎么做自己的工作,而且它可以讓人們檢索編譯后的代碼中的有用信息,而不必征求源代碼。
函數(shù)聲明的語(yǔ)法如下 -
語(yǔ)法
-module(modulename)
這里,modulename 是模塊的名稱。這必須在模塊代碼的第一行。下面的程序顯示了一個(gè)叫 helloworld 模塊的一個(gè)例子。
示例
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite("Hello World").
上面的代碼的輸出結(jié)果是 -
Hello World
模塊屬性
模塊屬性定義模塊的某些特性。模塊屬性包含一個(gè)標(biāo)簽和值。
屬性的一般語(yǔ)法是 -
語(yǔ)法
-Tag(Value)
下面的例子程序是用來(lái)演示模塊屬性如何使用 -
示例
-module(helloworld).
-author("TutorialPoint").
-version("1.0").
-export([start/0]).
start() ->
io:fwrite("Hello World").
以上程序定義2個(gè)自定義屬性:author 和 version,分別用來(lái)表示該程序的作者和版本號(hào)。
上面的代碼的輸出結(jié)果是 -
Hello World
預(yù)先內(nèi)置屬性
Erlang 有可連接到模塊的某些預(yù)先內(nèi)置構(gòu)建的屬性,讓我們來(lái)看看。
導(dǎo)出
導(dǎo)出屬性將使用函數(shù)和參數(shù)數(shù)量列表導(dǎo)出到其他模塊。它將定義模塊接口。我們?cè)谇懊娴睦又幸呀?jīng)看到了這一點(diǎn)。
語(yǔ)法
export([FunctionName1/FunctionArity1,.,FunctionNameN/FunctionArityN])
在這里,
示例
-module(helloworld).
-author("TutorialPoint").
-version("1.0").
-export([start/0]).
start() ->
io:fwrite("Hello World").
上面的代碼的輸出結(jié)果是 -
Hello World
導(dǎo)入
導(dǎo)入屬性用于從另一模塊導(dǎo)入函數(shù)以將其在本地使用
語(yǔ)法
-import (modulename , [functionname/parameter]).
在這里,
示例
-module(helloworld).
-import(io,[fwrite/1]).
-export([start/0]).
start() ->
fwrite("Hello, world!\n").
在上面的代碼中,我們使用的是 import 這個(gè)關(guān)鍵字來(lái)導(dǎo)入庫(kù) “io”,指定導(dǎo)入 fwrite 函數(shù)。所以,現(xiàn)在每當(dāng)調(diào)用fwrite函數(shù),不必每次都要帶上模塊的名稱。
上面的代碼的輸出結(jié)果是 -
Hello, world!