Erlang數據類型
任何編程語言,則需要使用變量來存儲各種類型的信息。變量是存儲器保留位置用來存儲數據值。這意味着,當你創建一個變量時在內存預留一些空間來存儲變量相關的數據值。
我們可能會存儲各種數據類型,如字符串,字符,寬字符,整數,浮點數,布爾等信息。基於變量的數據類型,操作系統分配內存,並決定什麼可以存儲在保留的存儲器位置中。
內置數據類型
Erlang提供了多種內置數據類型。以下是是在 Erlang 中定義的數據類型的列表 -
數字 − 在 Erlang 中,有兩種類型的數字類型:整數和浮點數;
原子 − 原子是文字,一個常數的名稱。原子被封閉在單引號('),如果它不以小寫字母開頭,或者如果它包含其它字符不是字母數字字符,下劃線(_)或 @。
布爾 − 在 Erlang 中布爾數據類型是兩個保留原子:true 和 false;
位字符串 − 字節序列用來存儲非類型化的內存區域;
元組 − 元組是具有固定數量的混合數據類型的術語。在元組中的每一項稱爲一個元素。元素的數量被認爲是元組的大小;
映射 − 映射是用 鍵-值關聯的可變數量的複合數據類型。映射中的每個鍵值關聯稱爲關聯對。鍵值對的部分被稱爲元素。關聯對(鍵-值)的數目被認爲是映射的大小;
列表 − 列表是由可變數量的混合數據類型組成。列表中的每個項被稱爲一個元素。元素的數量被認爲是列表的長度。
注 - 你會驚奇地看到,看不到上面列表中的字符串的類型。這是因爲在 Erlang 中是完全沒有定義字符串數據類型的。但是,我們將在後面的章節中看到如何處理字符串。下面是每個數據類型使用的例子。每個數據類型將詳細在隨後的章節中進行討論。
數字
數字的數據類型如何使用的例子將在下面的程序中演示。該程序顯示了 2 個整數的相加。
示例
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite("~w",[1+1]).
執行上面的程序,輸出結果如下:
2
原子類型
原子必須以小寫字母開頭,並且可以包含大寫和小寫字母,數字,下劃線(_)和「at」符號(@)。我們還可以在單引號中使用原子。
原子數據類型如何使用的例子如下面的程序中所示。在這個程序中,我們正在創建一個原子被稱爲 atom1 。
示例
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite(atom1).
執行上面的程序,輸出結果如下:
atom1
布爾值
布爾數據類型使用的例子如下面的程序所示。這個例子是比較 2 個整數的值,並打印生成的布爾值到控制檯。
示例
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite(2 =< 3).
執行上面的程序,輸出結果如下:
true
位字符串
位字符串數據類型如何使用的例子,如下面的程序所示。這個程序定義一個位字符串由2個比特位組成。binary_to_list 是 Erlang 中定義的一個內置函數,可以用於將一個位字符串轉換爲列表。
示例
-module(helloworld).
-export([start/0]).
start() ->
Bin1 = <<10,20>>,
X = binary_to_list(Bin1),
io:fwrite("~w",[X]).
執行上面的程序,輸出結果如下:
[10,20]
元組
元組數據類型如何使用的例子,如下面的程序中所示。在這裏,我們定義一個元組 P,並有3項數據。tuple_size是在 Erlang 中定義的一個內置函數,它是用來確定一個元組的大小。
示例
-module(helloworld).
-export([start/0]).
start() ->
P = {john,24,{june,25}} ,
io:fwrite("~w",[tuple_size(P)]).
執行上面的程序,輸出結果如下:
3
映射
如何使用映射(Map)數據類型如下面的程序中所示的例子。在這裏,我們定義一個Map M1 有 2 個映射。map_size是在 Erlang 中定義一個內置函數,它是用來確定一個映射的大小。
示例
-module(helloworld).
-export([start/0]).
start() ->
M1 = #{name=>john,age=>25},
io:fwrite("~w",[map_size(M1)]).
執行上面的程序,輸出結果如下:
2
列表
列表數據類型如何使用的例子如下面的程序中所示。在這裏,我們定義一個列表L,它有 3 個數據項。length 是在 Erlang 中定義一個內置函數,它是用來確定該列表的大小。
示例
-module(helloworld).
-export([start/0]).
start() ->
L = [10,20,30] ,
io:fwrite("~w",[length(L)]).
執行上面的程序,輸出結果如下:
3