• <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>

            劍孤寒的小站

            人生的價值不是用時間,而是用深度去衡量的!
            posts - 75, comments - 290, trackbacks - 0, articles - 0

            在Lua中使用枚舉型變量

            Posted on 2008-10-26 11:07 劍孤寒 閱讀(15637) 評論(2)  編輯 收藏 引用 所屬分類: Lua
            《在Lua中使用枚舉型變量》
            轉載請注明出處:http://groups.google.com/group/jianguhan


            用lua來寫游戲腳本的確是一件很方便的事情,但是有時候需要用到枚舉類型時就有點麻煩了,因為lua里時沒有枚舉型變量這個東西的,所以要使用枚舉還 得自己轉換一下,我寫了一個函數用來做這種轉換:

            function CreatEnumTable(tbl, index)
                assert(IsTable(tbl))
                local enumtbl = {}
                local enumindex = index or 0
                for i, v in ipairs(tbl) do
                    enumtbl[v] = enumindex + i
                end
                return enumtbl
            end

            在需要用到枚舉變量的地方只要這樣用就行了:
            EnumTable =
            {
                "ET1",
                "ET2",
            }

            EnumTable = CreatEnumTable(EnumTable )
            print(EnumTable.ET1)
            print(EnumTable.ET2)

            輸出為:
            1
            2

            當然,也可以指定下標從多少開始,
            比如從10開始,只要把上面創建枚舉表的語句換成下面這樣就可以了:
            EnumTable = CreatEnumTable(EnumTable, 10)

            Feedback

            # re: 在Lua中使用枚舉型變量   回復  更多評論   

            2013-08-15 09:32 by liquidmonkey
            function enum(t)
            local enumtable = {}
            local enumindex = 0
            local tmp,key,val
            for _,v in ipairs(t) do
            key,val = string.gmatch(v,"([%w_]+)[%s%c]*=[%s%c]*([%w%p%s]+)%c*")()
            if key then
            tmp = "return " .. string.gsub(val,"([%w_]+)",function (x) return enumtable[x] and enumtable[x] or (type(_G[x]) == "numbers" and _G[x] or x) end)
            enumindex = loadstring(tmp)()
            else
            key = string.gsub(v,"([%w_]+)","%1");
            end
            enumtable[key] = enumindex
            enumindex = enumindex + 1
            end
            return enumtable
            end
            ---------------------------------------------------------------------------------------------------

            MyGlobalNumber = 10
            MyEnum = enum{
            "a=1"
            "b"
            "c=MyGlobalNumber"
            "d"
            "e=100"
            "f"
            "g=2^3"
            "h"
            "i=math.floor(100.001)+MyGlobalNumber*10-100/5"
            "j"
            }

            # re: 在Lua中使用枚舉型變量   回復  更多評論   

            2013-08-15 10:03 by liquidmonkey
            更正:有個地方多余了
            tmp = "return " .. string.gsub(val,"([%w_]+)",function (x) return enumtable[x] and enumtable[x] or (type(_G[x]) == "numbers" and _G[x] or x) end)
            改成:
            tmp = "return " .. string.gsub(val,"([%w_]+)",function (x) return enumtable[x] and enumtable[x] or x end)
            一本色道久久88精品综合| 亚洲乱码日产精品a级毛片久久 | 久久久久99精品成人片直播| 综合久久国产九一剧情麻豆| 99久久婷婷免费国产综合精品| 青青草原综合久久大伊人精品| 久久乐国产综合亚洲精品| 国产亚洲美女精品久久久久狼| 性高湖久久久久久久久AAAAA| 国产精品久久久天天影视| 日本精品久久久久影院日本| 国产成人久久激情91| 99蜜桃臀久久久欧美精品网站 | 久久精品99久久香蕉国产色戒 | 久久国产精品二国产精品| 亚洲成色WWW久久网站| 久久99精品国产99久久6| 国产91色综合久久免费分享| 欧美亚洲国产精品久久久久| 亚洲国产二区三区久久| 久久精品亚洲精品国产色婷| 久久久久久久97| 欧美成a人片免费看久久| 亚洲嫩草影院久久精品| 久久无码av三级| 国产精品久久波多野结衣| 国产三级久久久精品麻豆三级| 精品久久久无码21p发布 | 狠狠色婷婷综合天天久久丁香| 久久精品亚洲日本波多野结衣| 亚洲精品高清国产一线久久| 精品国产青草久久久久福利| 性做久久久久久久久浪潮| 国产精品99久久久久久宅男小说| 亚洲а∨天堂久久精品| 一本久道久久综合狠狠躁AV| 一97日本道伊人久久综合影院| 久久婷婷国产剧情内射白浆| 一本一本久久aa综合精品| 久久夜色精品国产欧美乱| 大伊人青草狠狠久久|