lua中并没有枚举类型,我们该如何实现一个简单的枚举呢
enum {
APPLE = 101,
ORANGE,
GRAPE,
PEACH
};
上面是对应的c代码,接下来我们用lua实现类似的效果
核心的代码如下:
local function create_enum(tbl, start_idx)
local enum_tbl = {}
local enum_idx = start_idx or 0
for idx, val in ipairs(tbl) do
enum_tbl[val] = idx + enum_idx
end
return enum_tbl
end
它的原理,就是你有一个 enum 的表,里面是你想要表示的常量(元素类型是 字符串),然后再传入一个 起始计数,最后通过这个函数进行转换,将 enum常量作为表的 键,计数值 作为值
下面举个例子
local fruits = create_enum({
"APPLE", "ORANGE",
"GRAPE", "PEACH"
}, 100)
这里传入了一个表,里面是我们后续想要用的 enum 元素,使用字符串类型(因为是要用作表的键),然后传入 起始计数 100,表示从 101 开始(lua中元素索引是从1开始的,而不是像其他语言从0开始)
-- 查看表中具体的内容
-- 注意,这里是pairs而不是ipairs,因为这个表不是用连续整数索引的
for key, val in pairs(fruits) do
print(key, val)
end
-- 使用示例
print("fruits.APPLE ", fruits.APPLE)
print("fruits.ORANGE ", fruits.ORANGE)
print("fruits.GRAPE ", fruits.GRAPE)
print("fruits.PEACH ", fruits.PEACH)

posted on
浙公网安备 33010602011771号