Erlang 數據類型
1、數值(整數和浮點數)
Erlang中整數的大小沒有限制(唯一的限制就是物理內存的大小),運算時整數和浮點數會自動進行類型轉換,因此用不上顯式強制類型轉換。
使用數字0~9和字母A~Z/a~z 表示從2到36進制的數。
16#FFFF 十六進制的數
2#10010 二進制的數
36#zz 三十六進制的數
可用$前綴記法得到任意字符的ASCII碼。
$6
$D
$?
浮點數使用64位IEEE 754-1985格式(雙精度)。沒有單精度浮點數。
記法與大部分編程語言相同,唯一區別是隻能以數字開頭,不允許使用類似.01的記法。
3.14
-0.324
6.89e-13
2、二進制串/位串
一個包含在<<...>>中的整數序列。
<<0, 1, 2, 3>>
用字符串構成二進制串。
<<"hello", 32, "world">> 返回<<"hello world">>,其中32爲空格對應的ASCII碼。
3、原子
在Erlang中原子用作標籤。使用前不需要聲明,可以隨意創建並隨處使用。
原子以小寫字母開頭,在首字母后,可以使用大寫字母、數字、下劃線和@。
abc55_ofgg
如果還要使用到其他字符,就要給他們加上單引號。
'$%#*!'
長度上限是255個字符。在單個系統中原子的個數上限是1048576個。
原子一經創建,即便不再使用也永遠不會被清除,除非系統重啓。
常用原子:
true和false用於布爾運算;
ok用於那些返回值沒有任何意義、僅通過副作用發揮作用的函數;
undefined用作表示未知量的佔位符。
4、元組
元組是其他Erlang項式的定長有序序列。元組可以包含零個、一個或多個元素。其中的元素可以是相同數據類型的也可以是不同數據類型的。元素本身也可以是元組。
{}
{1, 2, 3}
{one, 2, "with love"}
{complex, {need, "half", {here}}}
標記元組:
用原子作爲第一個元素來標記元組數據的類別。
{size, 42}
{position, 5, 2}
5、列表(和字符串)
零個或多個Erlang項式的序列。空表[]被稱爲nil(它的值只佔一個字長的內存)。
引用透明性:被名稱所引用的值不可更改。列表可用於存放任意多個項式。
[]
[1, 2, 3]
[[1, 2, 3], [4, 5, 6]]
[{toto, "momo"}, {lili, 89}]
添加列表元素:(新元素從左側加入)
管道符|
[ 1 | [] ] 將1添加到空列表中
[ a, b, c | [1, 2, 3] ] 返回[a,b,c,1,2,3]
運算符++
[a, b, c] ++ [1, 2, 3] 返回[a,b,c,1,2,3]
Erlang中的雙引號字符串實際就是列表。
"abcd" 等價於 [97, 98, 99, 100] 或 [$a, $b, $c, $d]
在列表起始處添加一個零,可迫使shell打印出實際內容。
v(65)爲"abcd" [0 | v(65)] 爲 [0, 97, 98, 99, 100]
6、唯一標識符(pid、端口、引用)
pid:每個進程的唯一標識符。
pid在Erlang中是一種特殊的數據類型。
原則上在系統的生存期內所有的pid都是唯一的,但事實上,當系統運行的時間長到一定程度,前後創建的進程總數過億時,進程的標識符就有可能被重用。
調用函數self()可查看當前進程的pid。
shell打印pid的格式爲:<0.94.0>
端口:與進程的區別是,能與Erlang外界通信。
shell打印端口的格式爲:#Port<0.472>
引用:用於保障唯一性的一次性標籤或coockie。
shell打印引用的格式爲:#Ref<0.0.0.407>
調用函數make_ref()可生成引用。
7、Fun函數
函數式語言:可以像處理數據一樣處理函數。函數可以成爲別的函數的輸入,也可以成爲別的函數的求值結果。
在Erlang中將函數包裝成數據的對象稱作fun函數(閉包)。