Chinaunix首页 | 论坛 | 博客
  • 博客访问: 207979
  • 博文数量: 39
  • 博客积分: 1057
  • 博客等级: 准尉
  • 技术积分: 926
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-27 20:13
文章分类

全部博文(39)

文章存档

2012年(24)

2011年(15)

分类: 系统运维

2012-08-04 11:20:56

这里对Erlang的record做一个整理,record是Erlang中常用的数据结构,不对的地方多多指教,开始正文。

点击(此处)折叠或打开

  1. 1、记录在Erlang开发中使用很频繁,结构和功能与C中structs类似,本质上是元组,各种教材里面都讲的很多,这里简单再介绍一遍

点击(此处)折叠或打开

  1. 2、作为模块的属性在模块前面声明
  2. -module(demo1).
  3. -compile([export_all]).
  4. -record(robot,{name,
  5.                 type = undefine,
  6.                 details = []}).
  7. 这里就构造好的robot记录,拥有三个字段,其中type和details都有默认值,
  8. 从结构上可以明显看出来,record其实就是tuple(元组)语法上便利和包装

点击(此处)折叠或打开

  1. 3、赋值robot的方法
  2.     Robot = #robot{name = "albert",
  3.                     type = 99,
  4.                     details = [cn,gz,fire]}.
  5. 4、访问robot各个字段值的方法
  6.     Name = Robot#robot.name,
  7.     Type = Robot#robot.type,
  8.     Details = Robot#robot.detailes,

点击(此处)折叠或打开

  1. 5、在Erlang Shell里面,可以使用 rr(module) 载入module里面的record。

  2. tips    
  3.     在shell中,关于操作记录的一些函数
  4.     (1)rd(name,definition).
  5.         定义一个record,语法和在模块中一样。
  6.     (2)rf() , rf(RecordName)
  7.         移除已经加载的所有record或者指定的record
  8.     (3)rl(), rl([Name])
  9.         输出所有或者指定记录的结构(很有用)
  10.     (4)rp(Term)
  11.         将一个元组转换为记录

点击(此处)折叠或打开

  1. 6、在函数的头部和guards部分使用record
  2. 例子:
  3. -record(user,{id,name,age}).
  4. valid_user(#user{name = Name,age = 25}) ->
  5.     Name ++ "is valid user";
  6. auth_user(U = #user{}) when U#user.id >= 1 ->
  7.     authorized.

  8. 7、record的嵌套使用
  9. 例子
  10. NetsedBot = #robot{details=#anthor_robot{id = 1}}.
  11. 这样NetsedBot#robot.details也是一个record
  12. 在实际应用中遇到要存储的对象关系比较复杂的时候,我们都会使用嵌套的record帮组我们。

点击(此处)折叠或打开

  1. 8、记录通常保存在一个独立的hrl文件中,其他模块通过 '-include("my_record.hrl")' 来使用定义好的record
总结下,Erlang 的 record “数据结构”是一种key-value的数据结构,通过访问key来存储和获取对应的value,对于key-value这种结构应用,Erlang提供了很多模块和函数,这个会再下篇博客里面介绍。
阅读(7011) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~