记录其实就是元组的另一种形式。通过使用记录,可以给元组里的各个元素关联一个名称。
映射组是键-值对的关联性集合。键可以是任意的 Erlang 数据类型。
何时使用映射组或记录
记录是元组的另一种形式,因此它们的存储与性能特性和元组一样。映射组比元组占更多的存储空间,查找起来也更慢。另一方面,映射组比元组要灵活得多。
使用记录的场景:
- 当你可以用一些预先确定且数量固定的原子来表示数据时;
- 当记录里的元素数量和元素名称不会随时间而改变时;
- 有一大推元组,并且每个元组都有相同的结果。
使用映射组的场景:
- 当键不能预先知道时用来表示键-值数据结构;
- 当存在大量不同的键时用来表示数据;
- 当方便使用很重要而效率无关紧要时作为万能的数据结构使用;
- 用作"自解释型"的数据结构,也就是说,用过容易从键名猜出值的含义;
- 用来表示键-值解析树,例如XML或配置文件;
- 用 JSON 来和其他编程语言通信。
通过记录命名元组里的项
对于小型元组而言,记住各个元素代表什么几乎不成问题,但当元组包含大量元素时,给各个元素命名就更方便了。一旦命名了这些元素,就可以通过名称来指向它们,而不必记住它们在元组里的具体位置。
用记录声明来命名元组里的元素,语法是:
-record(Name, { %% 以下两个键带有默认值 key1 = Default1, key2 = Default2, ... %% 下一行就相当于 key 3 = undefined key3, ... }).
Name 是记录名,key1、key2这些是记录所含各个字段的名称,它们必须是原子,记录里的每个字段都可以带一个默认值,如果创建记录时没有指定某个字段的值,就会使用默认值。
假设想要操作一个代办事项列表。我们首先定义一个todo记录,然后将它保存在一个文件里(记录的定义既可以保存在 Erlang 源代码文件里,也可以保存在拓展名为 .hrl 的文件里,然后包含在 Erlang 源代码文件里)。文件包含是唯一能确保多个 Erlang 模块共享相同记录定义的方式。
时间: 2024-11-10 07:05:15