Fork me on GitHub
随笔 - 215  文章 - 13  trackbacks - 0
<2017年5月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910


专注即时通讯及网游服务端编程
------------------------------------
Openresty 官方模块
Openresty 标准模块(Opm)
Openresty 三方模块
------------------------------------
本博收藏大部分文章为转载,并在文章开头给出了原文出处,如有再转,敬请保留相关信息,这是大家对原创作者劳动成果的自觉尊重!!如为您带来不便,请于本博下留言,谢谢配合。

常用链接

留言簿(1)

随笔分类

随笔档案

相册

Awesome

Blog

Book

GitHub

Link

搜索

  •  

积分与排名

  • 积分 - 203806
  • 排名 - 127

最新评论

阅读排行榜

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 思月行云 阅读(382) 评论(0)  编辑 收藏 引用 所属分类: Erlang

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理