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的++和--运算符都是从右开始的,先计算后面的。
列表还有其他操作。我们下一篇来看!