erlang模塊化對象用法

在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中。

發佈了75 篇原創文章 · 獲贊 29 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章