Erlang基础 - 数据类型

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函数。

时间: 2024-10-11 19:44:44

Erlang基础 - 数据类型的相关文章

erlang自定义数据类型

Erlang系统自带的基础数据类型有:atom.tuple.list.binary.pid.float.number.port.reference.record. 用户可以通过通过命令type来自定义数据类型,实现方法: -type device() :: atom() | pid(). -type prompt() :: atom() | string(). 定义完后,可以在模块中使用export_type,将用户自定义类型导出,以便其他模块重用. -type env() :: [{atom(

Erlang基础 -- 介绍 -- Wordcount示例演示

在前两个blog中,已经说了Erlang的历史.应用场景.特点,这次主要演示一个Wordcount的示例,就是给定一个文本文件,统计这个文本文件中的单词以及该单词出现的次数. 今天和群友们讨论了一个问题,突然一下子就上升到哲学角度上了,装逼装大发了. PS:图片中有错别字,%s/财务和其他9个月/财务和其他9个人/g 不过真心想说的一点是,把Erlang系统,映射到现实中,很多奇葩问题,就能迎刃而解了.所以,在下面的简要设计中,我就尽可能的代入一下现实世界吧. 环境安装 mac 的话,用brew

TypeScript学习指南第一章--基础数据类型

基础数据类型 为了搭建应用程序,我们需要使用一些基础数据类型比如:numbers,strings,structures,boolean等等. 在TypeScript中除了在JavaScript中常见的数据类型外还有一个非常使用的枚举类型(enumeration type). Boolean 最基础的数据类型莫过于只有True和false的布尔类型了,在TypeScript,JavaScript以及其它的很多数程序语言中我们使用关键字'boolean'. var isDone: boolean =

2015.9.30.基础数据类型以及输入输出语句

从今天开始不定期更新C语言基础教程,请参考教材(仅仅参考!)进行学习,本系列教程只写基础部分,不会掺杂复杂的细节,这些细节在后续会根据需要再加入,如果有不懂请自行百度尝试解决.该系列文章内容可能来源我本人或者zhrmoe(他的主页:http://zhrmoe.iflab.org)的编写.文章如果有错误欢迎批评指正,谢谢!转载请注明来自本站, //2015.9.30  基本输入输出 #include <stdio.h> /* 基础数据类型 char 字符 int 整数 double 小数 对应的

Python中的基础数据类型

Python中基础数据类型 1.数字 整型a=12或者a=int(2),本质上各种数据类型都可看成是类,声明一个变量时候则是在实例化一个类. 整型具备的功能: class int(object): """ int(x=0) -> int or long int(x, base=10) -> int or long Convert a number or string to an integer, or return 0 if no arguments are gi

Python 之路 Day02 -基础数据类型及编码详解

  基础篇 本章大纲: 字符编码和解释器编码详解 变量命名规则 基础数据类型(一) int 基础数据类型(二)  string 基础数据类型(三) bool 基础数据类型(四) list 基础数据类型(五) tuple 基础数据类型(六) dict 基础数据类型(七) set 补充可迭代对象的循环连接及enumerate输出 字符编码和解释器编码详解 一,编码的重要性: 1.1 文件编码和字符编辑编码及读取编码 #!/usr/bin/env python #-*- coding:utf-8 -*

[.net 面向对象编程基础] (3) 基础中的基础——数据类型

[.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型存储,就跟我们买来衣服一样,裤子,上衣,冬天的,夏天的,总要分个类再放进衣柜中一样.越是高级的编程语言,数据类型分的越详细. 问题来了,这么多数据类型,我们是不是要一一记住,这真不是个省心的事情,不用怕,不用怕,不用怕,重要的事情说三遍. 重点:C#就15种数据类型. 准确来说,是15种预定义类型,

JavaScript的基础数据类型和表达式

Java Script的基础数据类型和表达式 基本的数据类型: number(数值)类型:可分为整数和浮点数 string(字符)类型:是用单引号“'”或者双引号“"”来说明的. boolean(布尔)类型:布尔类型的值true(对)或false(错). null和undefined:null表示一个“空”的值,undefind表示值未定义, &&:与运算,只有所有都为true,&&运算结果才是true. ||:或运算,只要其中一个true,||运算结果就是tru

【Swift】学习笔记(一)——熟知 基础数据类型,编码风格,元组,主张

自从苹果宣布swift之后,我一直想了解,他一直没有能够把它的正式学习,从今天开始,我会用我的博客来驱动swift得知,据我们了解还快. 1.定义变量和常量 var  定义变量,let定义常量. 比如: var test = 1 test = 2 //变量能够改变值 let test = 1 test = 2 //常量不能改变值,编译器会报错 var test1=1,test2=2,test3=3 //逗号分隔多个变量 2.添加类型标注 在 var test = 1 这个样例中.test被swi