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的++和--运算符都是从右开始的,先计算后面的。

 

列表还有其他操作。我们下一篇来看!

 

 

 

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