• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2017年4月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456


            專注即時通訊及網游服務端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標準模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 215511
            • 排名 - 118

            最新評論

            閱讀排行榜

            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
            欧美精品国产综合久久| 久久精品亚洲男人的天堂| 性欧美丰满熟妇XXXX性久久久 | 无码专区久久综合久中文字幕| 狠狠色丁香久久婷婷综合| 色综合久久无码五十路人妻| 国产亚洲美女精品久久久久狼| 99久久精品国产一区二区三区| 无码任你躁久久久久久老妇| 久久久噜噜噜久久熟女AA片| 久久无码AV中文出轨人妻| 久久亚洲日韩精品一区二区三区| 精品国产一区二区三区久久蜜臀| 亚洲va久久久噜噜噜久久 | 人妻无码精品久久亚瑟影视 | 亚洲欧洲精品成人久久曰影片| 一本一本久久A久久综合精品| 777久久精品一区二区三区无码| 伊人久久大香线蕉精品不卡| a级毛片无码兔费真人久久| 久久久久亚洲AV成人网人人网站 | A级毛片无码久久精品免费| 亚洲国产精品无码久久久不卡 | 97久久综合精品久久久综合| 久久伊人精品一区二区三区| 久久久久国产一区二区三区| 国产99久久久国产精免费| 久久99国内精品自在现线| 久久久国产打桩机| 婷婷久久综合九色综合九七| 久久精品国产亚洲一区二区三区| 免费观看久久精彩视频| 97久久天天综合色天天综合色hd| 久久亚洲美女精品国产精品| 一本久久知道综合久久| 狠狠色丁香婷婷久久综合 | 无码任你躁久久久久久| 久久久久久A亚洲欧洲AV冫 | 国产一区二区三区久久| 香蕉久久夜色精品国产小说| 国产毛片久久久久久国产毛片|