概念:
当使用元组进行编程的时候,如果过于庞大的元素数量,将会很难记住。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的指针;一个意思。