定义
- 记录实际上就是元组,只不过是元组的另一种形式。
- 记录中每一个元素由 原子和对应的值组成
如果接触过其他编程语言,可以理解为一个描述某个物体的数据结构
何时使用记录
- 当可以用一些预先确定且数量固定的原子来表示数据时
- 当记录里的元素数量和元素名称不会随时间而变化时
- 当有一堆元组,并且每个元组都有相同的结构时
定义 记录 的结构
-
定义记录时,可以放到
xxx.hrl
结尾的文件中.hrl
文件通常用于存放 多个模块 共享 的记录和宏定义,可以理解为头文件%% demo.hrl %% record_name: 记录的名字,必须是原子 %% item_name: 记录中元素的名字,必须是原子 %% item_value:记录中元素的默认值 %% other:元素可以没有默认值,此时该原子的默认值为 'undefined' -record(record_name, {item_name=item_value, other}).
-
举例
%% demo.hrl %% 首先定义记录的数据结构 %% todo: 记录的名字, 这里定义为todo,用于描述一个待办事项 %% status: 一条记录的元素,这里指该待办事项的状态 %% start_time: 一条记录的元素,这里指该待办事项 需要在什么时间开始 %% desc: 一条记录的元素,这里指该待办事项 其他备注信息 -record(todo, {status, start_time, desc}).
在源码中使用记录(创建、更新、获取)
- 创建
- 更新
- 提取
%% demo.erl -module("demo.erl"). %% 引用文件 -include("demo.hrl"). %% 添加待办事项 add_todo(StartTime, Desc) %% 创建了一个新的待办事项 Todo = #todo{start_time = StartTime, desc = Desc}. %% 设置待办事项的状态为执行中 start_todo(Todo) Todo2 = Todo#todo{status="start"}. %% 设置待办事项的状态为完成 close_todo(Todo) Todo2 = Todo#todo{status="finish"}. %% 获取待办事项的描述信息 get_toto_desc(Todo) Todo#todo.desc. %% 通过模式匹配获取所有元素的值 get_all_arg(Todo) #todo{start_time = StartTime, desc = Desc, status = Status} = Todo.
在Shell中使用记录
> erl
1> rr(demo.hrl). %% 编译头文件
[todo]
2> #todo{}. %% 创建一个全部都是默认值的记录
#todo{status = undefined, start_time = undefined, desc = undefined}
3> #todo{start_time = "2020/10/09 7:00", desc = "起床"}.
#todo{status = undefined, start_time = "2020/10/09 7:00", desc = "起床"}
%% 删除shell中todo记录的定义,删除后原本的变量就会变成一个普通的元组
4> rf(todo) .
ok
... %%省略,其他使用方法一样