模組是在一個單一的檔重新組合的函數,在一個單一的名稱。此外,在 Erlang 所有函數必須在模組定義。
大部分像算術,邏輯和布爾操作符的基本函數已經 Erlang 內部集成提供並且可以直接調用,因為在運行程式時的默認模組被加載。一個模組中使用定義的所有其他函數需要使用形式 Module:Function (參數) 來調用。
定義模組
有了模組,我們可以聲明兩個東西:函數和屬性。屬性就類似它的名稱,描述模組本身的元數據,這應該是明顯的向外界的功能,如:代碼作者等等。這種元數據是非常有用的,因為它給編譯器提示讓它知道怎麼做自己的工作,而且它可以讓人們檢索編譯後的代碼中的有用資訊,而不必徵求源代碼。
函數聲明的語法如下 -
語法
-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!