在lua中实现枚举类型
1、如果没有枚举类型。代码很可能会是这样
if type == 1 then
-- dosomething
elseif type == 2 then
-- dosomething
end
2、为了改进代码,我们在全局的一个文件中编写下面的代码
local ENUM = {}
-- 布阵类型 PVE 进攻
ENUM.BATTLE_TYPE_PVE_ATT = 1
-- 布阵类型 PVE 防守
ENUM.BATTLE_TYPE_PVE_DEF = 2
return ENUM
3、有了上面的定义,我们代码可读性得到提升。最开始的代码变成这样了:
if type == ENUM.BATTLE_TYPE_PVE_ATT then
-- dosomething
elseif type == ENUM.BATTLE_TYPE_PVE_DEF then
-- dosomething
end
4、现在代码貌似变得优雅了。但我们不知道一共有多少枚举类型。新增加一个类型的时候,我们的代码需要跟着变化。这违反开闭原则。
为了遵守开闭原则。我们先修改enum的代码。
local ENUM = {}
-- 布阵类型 PVE 进攻
ENUM.BATTLE_TYPE = {
PVE_ATT = 1,
PVE_DEF = 2,
}
return ENUM
5、修改enum实现后。方位的代码变成这样
if type == ENUM.BATTLE_TYPE.PVE_ATT then
-- dosomething
elseif type == ENUM.BATTLE_TYPE.PVE_DEF then
-- dosomething
end
6、local g_cmd = {
[ENUM.BATTLE_TYPE.PVE_ATT] = func1,
[ENUM.BATTLE_TYPE.PVE_DEF] = func2
}
function do_action(args)
local f = g_cmd[args.type]
f()
end
经过这样的修改,只修配置文件。就可增加功能。完全拥抱了变化