http://blog.csdn.net/yuanfengyun/article/details/51842319
在erlang中,由于没有变量的概念,生成一个结构以后不能够修改,只能修改后生成新的结构。这样持有一个对象变得比较困难。利用进程典存放生成的结构,通过ID进行索引,在生成结构时,返回{结构类型,ID},这样就可以实现形如Player = player:new(), Player:set_name(), Player:get_name()这样(C++、C#、Java)类似类的使用。
定义了一个player的类
-module(player).
-record(player,{id,name,age}).
-compile(export_all).
id()->
case get(player_id) of
undefined->
put(player_id,1),
1;
ID->
NewID = ID + 1,
NewID
end.
new()->
ID = id(),
Player = #player{id=ID},
put({player,ID},Player),
{player,ID}.
get_name({player,ID})->
#player{name=Name} = get({player,ID}),
Name.
set_name(Name,{player,ID})->
Player = get({player,ID}),
NewPlayer = Player#player{name=Name},
put({player,ID},NewPlayer).
get_age({player,ID})->
#player{age=Age} = get({player,ID}),
Age.
set_age(Age,{player,ID})->
Player = get({player,ID}),
NewPlayer = Player#player{age=Age},
put({player,ID},NewPlayer).
用法
P = player:new().
设置name
P:set_name("myname").
获取name
Name = P:get_name().
实现中是将数据通过ID索引放在了进程字典中,如果需要跨进程访问,可以放在ets中。
posted on 2017-05-19 17:23
思月行云 阅读(405)
评论(0) 编辑 收藏 引用 所属分类:
Erlang