【Erlang】十六、记录 (record) (数据结构)


定义

  • 记录实际上就是元组,只不过是元组的另一种形式。
  • 记录中每一个元素由 原子和对应的值组成

如果接触过其他编程语言,可以理解为一个描述某个物体的数据结构


何时使用记录

  • 当可以用一些预先确定数量固定的原子来表示数据时
  • 当记录里的元素数量和元素名称不会随时间而变化
  • 当有一堆元组,并且每个元组都有相同的结构

定义 记录 的结构

  • 定义记录时,可以放到 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
	
	... %%省略,其他使用方法一样

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值