erlang的數據類型 (1)

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的++和--運算符都是從右開始的,先計算後面的。

 

列表還有其他操作。我們下一篇來看!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章