erlang模块化对象用法

来源:互联网 发布:手机硬件修复软件 编辑:程序博客网 时间:2024/05/18 00:24

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

0 0