这里对Erlang的record做一个整理,record是Erlang中常用的数据结构,不对的地方多多指教,开始正文。
- 1、记录在Erlang开发中使用很频繁,结构和功能与C中structs类似,本质上是元组,各种教材里面都讲的很多,这里简单再介绍一遍
- 2、作为模块的属性在模块前面声明
- -module(demo1).
- -compile([export_all]).
- -record(robot,{name,
- type = undefine,
- details = []}).
- 这里就构造好的robot记录,拥有三个字段,其中type和details都有默认值,
- 从结构上可以明显看出来,record其实就是tuple(元组)语法上便利和包装
- 3、赋值robot的方法
- Robot = #robot{name = "albert",
- type = 99,
- details = [cn,gz,fire]}.
- 4、访问robot各个字段值的方法
- Name = Robot#robot.name,
- Type = Robot#robot.type,
- Details = Robot#robot.detailes,
- 5、在Erlang Shell里面,可以使用 rr(module) 载入module里面的record。
- tips
- 在shell中,关于操作记录的一些函数
- (1)rd(name,definition).
- 定义一个record,语法和在模块中一样。
- (2)rf() , rf(RecordName)
- 移除已经加载的所有record或者指定的record
- (3)rl(), rl([Name])
- 输出所有或者指定记录的结构(很有用)
- (4)rp(Term)
- 将一个元组转换为记录
- 6、在函数的头部和guards部分使用record
- 例子:
- -record(user,{id,name,age}).
- valid_user(#user{name = Name,age = 25}) ->
- Name ++ "is valid user";
- auth_user(U = #user{}) when U#user.id >= 1 ->
- authorized.
- 7、record的嵌套使用
- 例子
- NetsedBot = #robot{details=#anthor_robot{id = 1}}.
- 这样NetsedBot#robot.details也是一个record
- 在实际应用中遇到要存储的对象关系比较复杂的时候,我们都会使用嵌套的record帮组我们。
- 8、记录通常保存在一个独立的hrl文件中,其他模块通过 '-include("my_record.hrl")' 来使用定义好的record
总结下,Erlang 的 record “数据结构”是一种key-value的数据结构,通过访问key来存储和获取对应的value,对于key-value这种结构应用,Erlang提供了很多模块和函数,这个会再下篇博客里面介绍。
阅读(7011) | 评论(0) | 转发(0) |