[Erlang开发之路]回顾总结一:Erlang的变量类型

开篇语

看完了《Erlang程序设计》之后,我觉得我还是没有系统性地掌握好Erlang这一门语言,所以有必要去回过头来把我所学到,所认知到的东西给总结下来,而总结内容会比之前记录的内容精简,因为总结下来的会是学习这一门语言中的核心:变量类型、数据结构、特性、以及特属Erlang的OTP框架等

一、变量类型

  • 原子类型 atom()
    1、这一种变量类型放在C++里就和enum一样,能对这种类型的变量的操作只能进行比较,而不能进行任何的处理操作,比如分隔,匹配等等,而且在Erlang中模块名和方法名都是atom。
    2、那么atom的格式是怎么样的呢?只要你是小写字母开头(不包含数字),你都是atom类型的变量。
    3、一个atom一旦被创建,就不会被释放掉,因为它不参与Erlang的垃圾回收,而且一个Erlang虚拟机中有atom的数量限制,一旦超过就会耗光内存,如果你害怕一个新的原子类型被创建,你可以使用list_to_existing_atom(atom)来防止,用这个函数来使用原子类型的变量必须是这个原子之前已经创建了。

  • 数值类型 Number()
    1.支持数字和浮点型。integer()和float()
    2.浮点可表示为2.3,2.3e3,2.3e-3等类型。
    3.支持用char来获取字符的ASCII值,比如a就是97
    4.支持进行2-36进制数的表示,如3#11表示4.

  • 元组类型 Tuple()
    类似于Object,不同的是,它的长度是固定的,形式如下:{Term1,...,TermN}可以用模式匹配的方式轻松的获取Tuple中的某一值,而模式匹配的时候不能像列表一样用|分隔开,因为长度是固定的,通过这个特性也可以拿去区别开同名函数

  • 列表类型 List
    1、形式如下:[Term1,...,TermN]
    2、可以用|来连接Head和Tail,其中Head可以是任意Term,而Tail必须是List。如[1|2]虽然能正常执行,但是却不能被length等内置函数使用。
    3、需要注意的是:length(1|[2,3])为3,但是length([1,2]|3)为2
    4、可以用模式匹配加递归的方式依次获取List的元素。
    5、这里有一个特性:列表推导,可以通过列表推导去执行查询式的操作,去形成一个新的列表
    NewList = [Expression || GeneratorExp1, GeneratorExp2, ..., GeneratorExpN, Condition1, Condition2, ... ConditionM]

关于列表还要注意的是:有几个函数空列表需要注意,否则报错:
a. 最大值 lists:max(),
b.最小值 lists:min(),
c.[Head|Tail]模式匹配
除非本身兼容空列表的函数,譬如列表推导【F(X)||X<-List】, lists:foldl(), lists:map() 等等,可以不考虑空列表情况。


  • 位串Bit Strings与二进制型binary
    1、Bit Strings代表无类型的内存区域,表现形式为<<E1,...,En>>。
    2、其中Ei的形式为Value 或 Value:Size 或 Value/TypeSpecifierList 或 Value:Size/TypeSpecifierList,Size则是这段位的长度
    3、TypeSpecifierList的形式是End-Sign-Type-Unit.
    (a).其中Type可以是integer(default),float,binary,bytes,bitstring,bits,utf8,utf16,utf32形式的
    (b).Sign可以是signed或者unsigned(default)
    (c).Unit取值范围是1-256,这个数值用来扩展内存区域,将原来的区域扩展Size(IntegerLiteral-1)位,默认值为1,即不进行扩展。int、float\bitstring的Unit默认是1,binary是8,UTF类型无需提供,写法是Unit:1...256
    (d).End可以是big(default),little,native,意义就是机器的字节顺序,native是根据CPU确定,big是网络字节序
    4.可以用模式匹配的方式轻松的获取内存区域中某一位置的值,用Erlang来处理数据很方便,但是不推荐使用Erlang来处理大量的数据,因为Erlang在数据处理方面比C++慢
    (a).List推导出Binary
    << <<Bit * 2:8>>|| Bit<-[1,2,3,4] >>
    (b).Binary推导出List
    [2
    Bit || <<Bit>> <- <<1,2,3,4>> ]

  • 函数 Fun
    变量也可以来保存一个函数,有两种方式可以去保存一个函数到变量里:
    1.匿名函数
    Function=fun()->
    %to_something()
    end.

2.已定义的函数
Function=Mod:FunctionName/Arity
函数变量=模块名:函数名/元数(参数个数)


  • 字符串 String
    String由双引号和字符串来表示,其实质是List。如"hello"等价于[h,e,l,l,$o].两个相邻的字符串将组合成一个字符串,即"he" "llo"等价于"hello"。也可以用Binary来表示字符串。
    说实话我不是很确定这是不是一种变量类型,因为字符串的表示方法有很多种,binary可以去表示(当bit都是ascii范围内时),List也可以去表示字符串

  • 记录 Record
    Record类似于Struct,Record表达式会在编译时转为tuple表达式。
创建记录:
-record(RecordName,{
    Field[=defaultValue,
    .
    .
    .
    FieldN[=defaultValue]
}).
读取记录:
       rr(RecordFile).
在元组上套记录:
    Var=#RecordName{Field=Value,...,FieldN=Value}.
    有默认值的可以不赋值
访问FieldN:
    Var2=Var#RecordName.FieldN
更新FieldN:
    Var#RecordName{Field1=Value,...,FieldN=Value}
    如果Value不改变可以不在里面赋值

  • Boolean 这种类型不存在额
    Boolean实际上是用原子true和false来表示的,
    不能和C++中一样,当成数字来用,要牢记,在Erlang中,它是Atom值。

  • 其他不常用的类型
    比如Port()、Ref、Pid等等
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容