打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在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"
}
 
更正:有个地方多余了
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)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Class.lua
lua string - string.gsub
小谈Lua String 函数
Lua中字符串库中的几个重点函数
利用nginx+lua实现通用的请求输入输出日志打印
lua和其他语言
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服