在lua中实现枚举类型

 时间:2026-02-12 04:08:35

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中实现枚举类型

  • UOS试用期怎么激活?
  • sql server2014怎么设置sa用户登录
  • win7怎么给文件夹更换图标
  • 怎么用vbs换壁纸
  • win7中如何查看硬盘是不是gpt分区
  • 热门搜索
    smart是什么意思 普通的反义词是什么 越什么越什么的词语 后腰疼痛是什么原因 希冀是什么意思 喉咙有异物感是什么原因 杀青什么意思是 滥觞是什么意思 强势是什么意思 fever是什么意思