在lua中实现枚举类型

2025-10-19 14:28:33

1、如果没有枚举类型。代码很可能会是这样

if type == 1 then

  -- dosomething

elseif type == 2 then

  -- dosomething

end

在lua中实现枚举类型

2、为了改进代码,我们在全局的一个文件中编写下面的代码

local ENUM = {}

-- 布阵类型 PVE 进攻

ENUM.BATTLE_TYPE_PVE_ATT = 1

-- 布阵类型 PVE 防守

ENUM.BATTLE_TYPE_PVE_DEF = 2

return ENUM

在lua中实现枚举类型

3、有了上面的定义,我们代码可读性得到提升。最开始的代码变成这样了:

if type == ENUM.BATTLE_TYPE_PVE_ATT then

  -- dosomething

elseif type == ENUM.BATTLE_TYPE_PVE_DEF then

  -- dosomething

end

在lua中实现枚举类型

4、现在代码貌似变得优雅了。但我们不知道一共有多少枚举类型。新增加一个类型的时候,我们的代码需要跟着变化。这违反开闭原则。

为了遵守开闭原则。我们先修改enum的代码。

local ENUM = {}

-- 布阵类型 PVE 进攻

ENUM.BATTLE_TYPE = {

  PVE_ATT = 1,

  PVE_DEF = 2,

}

return ENUM

在lua中实现枚举类型

5、修改enum实现后。方位的代码变成这样

if type == ENUM.BATTLE_TYPE.PVE_ATT then

  -- dosomething

elseif type == ENUM.BATTLE_TYPE.PVE_DEF then

  -- dosomething

end

在lua中实现枚举类型

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

经过这样的修改,只修配置文件。就可增加功能。完全拥抱了变化

在lua中实现枚举类型

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢