您的位置:首页 > 其它

学习record相关知识

2012-11-21 23:52 302 查看
概念:

当使用元组进行编程的时候,如果过于庞大的元素数量,将会很难记住。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的指针;一个意思。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: