现在的位置: 首页 > 综合 > 正文

Erlang基础 – 数据类型

2019年06月20日 ⁄ 综合 ⁄ 共 2209字 ⁄ 字号 评论关闭

Erlang数据类型很少,很容易掌握:

一、数值类型(整数和浮点数)

      1、整数

     整数大小事没有限制的,较小的整数会被存放在单个机器字长内,较大的整数会自动按需分配内存。所以根本就不存在溢出的问题。

      示例:

     101

     -101

     1234567890 * 987654321 * 999999999

     另外,还可以使用2进制到36进制的整数,如:16#FF00,2#10101,36#ZZ。

     还有,利用$前缀记法可以得到任意字符的数值编码(ascii/Latin-1/Unicode皆可)

     如:$9,$z,$\n

     2、浮点数

     Erlang的浮点数采用双精度,没有单精度的说法,且浮点数不可以用.(英文句号)开头,如:.01,而erlang要求必须以数字开头,如:0.01。

    

     3、算数运算符与位运算

     +、- 和 *

     其中除法分两种:/ 和 div,如:4/2 结果是 2.0,4 div 2 结果是 3,整数运算符的余数克由运算符 rem 实现,如: 15 rem 4 结果是 3。

     另外还有一些用于整数位运算的运算符:N bsl K表示将整数N左移K位,bsr是右移。位逻辑运算符分别是band、bor、bxor和bnot。例如:X band (bnot Y)会再X中将Y所占用的位清零。


二、二进制串与位串

     整数取值范围0~255,例:<<0,1,2,...,255>>,还可以用字符串构造二进制串,例:<<"hello", 32, "world">>


三、原子

     Erlang中原子时一种仅由字符序列来标识的特殊字符串常量,因此两个原子只要具有相同的字符表示,就完全等同。但在系统内部,这些字符串存储在某张表内,并由表的下标定位,因此在运行时只要比较两个小整数就可以判断两个原子是否相等。每个原子仅占一个字长的内存。

     Erlang中,原子的作用类似于java或C语言中得enum常量,区别在于无须事先声明原子,可以随意创建并随处使用。通常情况下,原子以小写字母开头,如:

     ok、error、foo、undefined

     若再用到其他特殊字符,就得给他们加上单引号,如:

     ‘¥%#*!’

     ‘Blanks and Capitals can be quoted'

     你应该把原子当做一类特殊的标签,而不是普通的字符串。他们的长度上限是255个字符,在单个系统中原子的总数也是有上限的:目前是一百多万个,准确地说是1048576个。一般来说这个上限已经足够大了,但对于长期运行的系统,你应该避免动态生成诸如:'x_4711','x_4712'这类的全局唯一的原子。原子已经创建,即便不再使用也永远不会被清除,除非系统重启。


四、元组

     元组是定长有序序列,元组用大括号来表示,如:

     {1, 2, 3}

     {one, two, three, four}

     {from, "Russia", "with love"}

     {complex, {nested, "structure", {here}}}

     正如C中得struct或Java中的对象一样,元组是在erlang中构造符合数据结构或一次性返回多个结果值的主要手段;只是元组的元素项没有名称,只有编号。访问元组中得元素是常熟时间复杂度的操作,跟在Java中访问数组元素一样快速和安全。借助后续即将介绍的记录语法,你可以给元组中得元素项命名,这样就不用直接使用下标了。

     另外,通过模式匹配还可以简单地用变量来引用元组的不同部分,因此很少需要直接用下标来访问元素项。

五、列表

     列表是Erlang各种数据类型中得真正的主力军。例:

     []

     [1, 2, 3]

     [one, two, three]

     [{tomorrow, "buy cheese"},

      {soon, "fix trap door"},

      {later, "repair moon rocket"}]

     添加列表,如:

     [5, 4, 3 | [2, 1]]  这将得到 [5, 4, 3, 2, 1]

     [1, 2, 3, 4] ++ [5, 6, 7, 8]  这将得到 [1, 2, 3, 4, 5, 6, 7, 8]。

六、字符串

     Erlang中的双引号字符串实际上就事列表,如:

     “abcd"

     "Hello!"

     " \t\r\n"

七、唯一标识符:pid、端口和引用

     1、pid (进程标识符)

          可以通过self()得到当前进程的pid,打印格式:<0.35.0>

     2、端口标识符

          端口和进程差不多,只是他还可以与外界通信,端口的打印格式:#Port<0.472>

     3、引用

          这种数据类型中的第三种数据类型就是引用,常备称作ref。可由make_ref()函数生成,打印格式为#Ref<0.0.0.39>。引用常被用作各种要求保证唯一性的一次性标签或cookie。

八、fun函数

     Erlang被称作函数式语言,这类语言的一个显著特征就是可以像处理数据一样处理函数 -- 也就是说,函数可以成为别的函数的输入,也可以成为别的函数的求职结果,还可以把函数存在数据结构中供后续使用,诸如此类。当然,还要提供函数调用机制。在Erlang中,这种将函数包装成数据的对象称作fun函数。

抱歉!评论已关闭.