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
思月行云 閱讀(421)
評論(0) 編輯 收藏 引用 所屬分類:
Erlang