Luau 中的枚举模式
本课属于 Coddy Lua 学习旅程的“Luau 入门”单元。第 55 课,共 80 课。
程序中经常会用到从一小组固定值中选出的值:订单可能处于待处理、已发货或已送达状态;玩家可能面朝上、下、左或右。许多语言都有用于此目的的 enum 关键字。Luau 没有这个关键字,而且也不需要,因为你已经掌握的两种工具就能完成这项工作。
模式 1:常量表。普通表可以将有意义的名称映射到值,取代散布在代码中的“魔法数字”:
local Status = {
Pending = 1,
Active = 2,
Done = 3,
}
print(Status.Active) -- 2这是一个真实的运行时值:你可以读取 Status.Active、与它进行比较,也可以传递它,就像你一直使用的表一样。
模式 2:字面量联合类型。由确切字符串值组成的类型,使用你在联合类型一章中学过的字面量类型:
type Color = "red" | "green" | "blue"
local favorite: Color = "green" -- ✓
local oops: Color = "yellow" -- ✗ 类型错误联合类型只供检查器使用,运行时开销为零,但它能保证变量只能保存这个集合中的值。这两种模式相辅相成:常量表用一个名称提供运行时值;联合类型则提供编译时保证。在本章后面,你还会学到 table.freeze,它可以防止常量表在运行时被修改。
挑战
简单并排尝试这两种枚举模式。
- 创建常量表
local Speed = {Slow = 8, Fast = 24}。 - 编写
type Pace = "slow" | "fast",并声明local pace: Pace = "fast"。 - 打印
Speed.Fast,然后打印pace。
按下运行代码:输出会显示 24 和 fast。
亲手试试
-- 1)创建常量表 Speed,其中 Slow = 8,Fast = 24
-- 2)定义类型 Pace = "slow" | "fast",然后声明 local pace: Pace = "fast"
-- 3)先打印 Speed.Fast,再打印 pace
Luau 入门中的所有课
自己练习: Luau 在线编译器