Erlang学习笔记(五)记录与映射组

记录其实就是元组的另一种形式。通过使用记录,可以给元组里的各个元素关联一个名称。
映射组是键-值的关联性集合。键可以是任意的Erlang数据类型。

1. 何时使用映射组或记录

使用记录的情况:
1. 当你可以用一些预定且数量固定的原子来表示数据时;
2. 当记录里的元素数量和元素名称不会随着时间而改变时;
3. 当存储空间是个问题时,典型的案例是你有一大堆元组,并且没一个元组都有相同的结构。
使用映射的情况:
1. 当键不能预先知道时用来表示键-值数据结构;
2. 当存在大量不同的键时用来表示数据;
3. 当方便使用很重要而效率无关紧要时作为万能的数据结构实现;
4. 用作“自解释型”的数据结构,也就是说,用户容易从键名猜出键值的含义;
5. 用来表示键-值解析树,例如XML或配置文件;
6. 用Json来和其他编程语言通信。

2. 通过记录命名元组里的项

一旦命名了元组里的元素,就可以通过名称来指向他们,而不必记住它们在元组里面的具体位置。

-record(Name,{
              %%以下两个键带有默认值
              key1 = Default1,
              key2 = Default2,
              ……
              %%下一行就相当于key 3 = undefined
              key3,
              ……
                }).

举个栗子,假设想要操作一个待办项列表。我们首先定义一个todo记录,然后将它保存在一个文件里(记录的定义既可以保存在Erlang源代码文件里,也可以由扩展名为.hrl的文件保存,然后包含在源代码文件里)。
文件包含是唯一能确保多个Erlang模块共享记录定义的方式。类似于C语言中的.h文件保存公众定义,然后包含在源代码文件里。

-record(todo, {status=reminder, who = joe, text}).

记录一旦被定义,就可以创建记录的实例了。
在Shell中,必须先把记录的定义读入shell,然后才能创建记录。我们将用shell函数rr(read records 的缩写,即读取记录)来实现。

rr("records.hrl").

2.1 创建和更新记录

创建新的记录:

#todo{}.
X1 = #todo{status=urgent, text="Fix errata in book"}.

复制一个现有的记录

X2 = X1#todo{status=done}.

X2是创建了X1的一个副本(类型必须是todo),并修改字段status的值为done。请记住生成的是原始记录的一个副本,原始记录并没有变化。

2.2 提取记录字段

在一次操作中提取记录的多个字段,可以使用模式匹配。

#todo{who = W, text = Txt} = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值