学习record相关知识

概念:

当使用元组进行编程的时候,如果过于庞大的元素数量,将会很难记住。Record提出来,是用于提供C语言里面的一种类似structure的一个有着固定数目字段的数据结构。

记录定义:

-record( person,{ name, age, phone }).

构造一个record:

P1=#person{ name=”Jason.Bourne”,
			  age = 19,
			  phone=119
}.

实例代码:

%%
%% Author:  erlang.hell
%% Date:    2012-11-21
%%
-module(t_record).
-export([autoTest/0]).
-record(location,{x=0,y=0}).
-record(person,{ name, age=0, phone=110,location=#location{x=250,y=250} } ).

autoTest()->
    P1=#person{ name="Jason Bourne",
        age=19,
        phone=119
    },
    P2=#person{ name="Erlang Hell"},
    showPerson(P1),
    showPerson(P2),
    N_P2=birthday(P2),
    showPerson(N_P2),
    NN_P2=birthdayEx(N_P2),
    showPersonEx(NN_P2),
    N_P1=bourneBirthday(P1),
    showPersonEx(N_P1).

showPerson(P)->
    io:format("name: ~p age: ~p phone: ~p\n", [P#person.name,P#person.age,P#person.phone]).

showPersonEx(#person{age=Age,name=Name,phone=Phone,location=L})->
    io:format("show_EX name: ~p age: ~p phone: ~p x: ~p y: ~p\n", [Name,Age,Phone,L#location.x,L#location.y]).

birthday(P)->
    P#person{age=P#person.age + 1 }.

birthdayEx(#person{age=Age}=P)->
    P#person{age=Age+1}.

%% just for Jason Bourne
bourneBirthday( #person{age=Age,name="Jason Bourne"}=P)->
    P#person{age=Age+ 1 };
bourneBirthday( P ) ->
    P.

测试:

41> f().
ok
42>  c(t_record).
{ok,t_record}
43> t_record:autoTest().
name: "Jason Bourne" age: 19 phone: 119
name: "Erlang Hell" age: 0 phone: 110
name: "Erlang Hell" age: 1 phone: 110
show_EX name: "Erlang Hell" age: 2 phone: 110 x: 250 y: 250
show_EX name: "Jason Bourne" age: 20 phone: 119 x: 250 y: 250
ok

命令行record相关:

加载命令

rr(RecordName).

删除加载命令

rf(RecordName).

 

注意的知识点:

1.      定义record;

2.      如何构造record;

3.      如何访问到成员;

4.      如何嵌套数据结构;

5.      record的模式匹配;

本质上来说,record在内存中的表现是一个元组[Tuple],-record是一个用于将元组,符号化解析出来。如果学过C语言的都知道,我们可以定一个struct,然后将一块内存强制转换成为这个struct的指针;一个意思。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值