使用表实现数值枚举
本课属于 Coddy Lua 学习旅程的“Luau 入门”单元。第 56 课,共 80 课。
以下是完整的常量表模式。选择一个 PascalCase 表名,为每个成员指定一个明确的数字,从此以后,代码就使用名称来表达含义:
local UserRole = {
Admin = 1,
Editor = 2,
Viewer = 3,
}与 TypeScript 的 enum 不同,这里不会自动编号。每个值都由你来选择。从 1 开始很符合 Lua 的惯例,不过任何方案都可以(HTTP 风格的代码,例如 200 和 404,也没问题)。
在比较时,成员会很有用。接收角色的函数可以使用命名常量进行分支,而不是直接使用数字:
local function checkPermissions(role: number)
if role == UserRole.Admin then
print("Full access granted")
elseif role == UserRole.Editor then
print("Edit access granted")
else
print("View access only")
end
end注意,参数的类型是 number:单靠这种表模式并不能限制允许使用哪些数字。下一课介绍的字面量联合类型正好可以提供这种保证。
挑战
简单用常量表为三个难度级别命名。
- 创建
local Level = {Easy = 1, Normal = 2, Hard = 3}。 - 编写
local function describeLevel(level: number): string,当级别为Level.Easy时返回"Relaxed",当级别为Level.Normal时返回"Standard",否则返回"Brutal"。 - 先打印
Level.Hard,然后打印describeLevel(Level.Normal)。
按“运行”:输出会显示 3 和 Standard。
亲手试试
-- 1)Level 常量表(Easy = 1, Normal = 2, Hard = 3)
-- 2)用 if/elseif/else 编写 describeLevel(level: number): string
-- 3)先打印 Level.Hard,再调用 describeLevel(Level.Normal)
Luau 入门中的所有课
自己练习: Luau 在线编译器