erlang的數據類型比較少,內容也很另類。因爲erlang的定位不同。
一,數字
erlang裏面沒有整形、浮點之類的區分。所有的數都是number.
比如我們計算5/2,一般的語音得到的是2.erlang不一樣,它得到2.5
> 5 / 2. 2.5
注意表達式的後面有一個點,erlang使用點來表示完結。
這裏例子同時說明 / 在erlang裏面不表達整除,那整除怎麼辦呢?
erlang的運算附也個別,用div表示整除,rem表示取餘:
> 5 div 2. 2 > 5 rem 2. 1
其他沒有什麼特殊的,也是用*表示乘法。
如果想表示10進制以外的數,使用#就行。比如:
> 2#101010. 42 > 8#0677. 447 > 16#AE. 174
分別表示二進制、8進制和16進制。
二,原子 atom
erlang裏面有一種十分特別的數據類型,叫原子。
原子類型的命名必須是小寫字母開頭(除非不是字母開頭的),所以erlang裏面的變量就不得不必須大寫字母開頭了(除非不是字母開頭的)。
原子類型秉承所見即所得的原則,你看到它的名稱就代表了它的值,僅此而已。
你不能給它賦予其他的值,因爲和變量一樣,它也是不能改變的。它值表示構成它的幾個字母而已:
> at = "3434". ** exception error: no match of right hand side value "3434" > at = er. ** exception error: no match of right hand side value er > at = 'at'. at > at = "at". ** exception error: no match of right hand side value "at"
原子外面的單引號可以省略,不過裏面有特殊字符就不能了。
注意:原子是不會被垃圾回收的~~
三,布爾類型
true和false也是erlang的關鍵字。
布爾類型的運算符一般是and、or、not:
> true and false. false > false or true. true > true xor false. true > not false. true > not (true and true). false
xor表示異或。
和其他語言不同的是,and和or在計算的時候一定會把兩邊的表達式都檢查,你期望前面是false就不要繼續and了,或者前面是true就不要繼續or了,是不行的。這樣需要使用andalso和orelse。
不同於其他語言使用==和!=來比較兩個變量,erlang使用 =:= 和=/= :
> 5 =:= 5. true > 5 =:= 5.0. false > 5 =/= 5.0. true > 5 /= 5.0. false 20> 5 == 5.0. true
但是你依然可以使用 == 和 /= 來比較。仔細看下它們的區別。
erlang可以使用>= 和 =<,不是<=:
> 1 >= 1. true > 1 =< 1. true
true和false是不和任何數等同的,和原子一樣,它們大於所有的數:
> 999999999999999<at. true > 34343<false. true
四,元組
pythoner可能要興奮一下,沒錯,erlang也有元組,不過和python有些區別。
元組是使用大括號包裝的一些了數據,數據間用逗號分開:
{Element1, Element2, ..., ElementN}.
元組的元素也可以是元組,這沒有什麼稀罕的。
不過要記着的就是原子元素也是不能匹配的:
> PreciseTemperature = {celsius, 23.213}. {celsius,23.213} > {kelvin, T} = PreciseTemperature. ** exception error: no match of right hand side value {celsius,23.213}
嘗試將celsius賦值給kelvin了,失敗。
五,列表
和元組類似,不過列表使用中括號來包裝:
> [97, 98, 99]. "abc"
尼瑪這啥情況?
沒錯被你發現了,erlang裏面的string就是字符列表。
不過讓你頭疼的並不是這樣,而是:
> [97,98,99,4,5,6]. [97,98,99,4,5,6] > [233]. "é"
哭了吧。。。
那就看點過癮的:
5> [1,2,3] ++ [4,5]. [1,2,3,4,5] 6> [1,2,3,4,5] -- [1,2,3]. [4,5] 7> [2,4,2] -- [2,2]. [4] 8> [2,4,2] -- [2,4,2]. []
erlang使用++和--對列表進行操作。不過詭異的是:
9> [1,2,3] -- [1,2] -- [3]. [3] 10> [1,2,3] -- [1,2] -- [2]. [2,3]
尼妹完全看不懂了啊!原來erlang的++和--運算符都是從右開始的,先計算後面的。
列表還有其他操作。我們下一篇來看!