将字符串枚举表示为联合类型
本课属于 Coddy Lua 学习旅程的“Luau 入门”单元。第 57 课,共 80 课。
数字会让日志显得晦涩:看到 2 几乎得不到什么信息,看到 "down" 则一目了然。要创建易读的枚举,Luau 的字面量联合类型是合适的工具:这种类型的成员是精确的字符串:
type Direction = "up" | "down" | "left" | "right"
local facing: Direction = "up" -- ✓
local typo: Direction = "upp" -- ✗ 编辑时出现类型错误标注为 Direction 的变量可以保存这四个字符串,除此之外都不行。只要拼错其中一个,检查器就会立即发现:这个 bug 根本不会到达玩家那里。
在运行时,这些值是普通字符串。你可以打印它们、拼接它们,也可以用 == 比较它们。你对字符串了解的一切在这里都适用:
print(facing) -- 上
print(`facing {facing}`) -- 面朝上比较一下你现在掌握的两种模式:常量表会创建一个运行时值(UserRole)来保存成员,而字面量联合类型不会创建任何值。没有 Direction 表,只有一条由检查器强制执行的规则,用来规定哪些字符串符合要求。字面量联合类型能提供描述清晰、自带说明的值,而且运行时成本为零,因此它是 Luau 代码中首选的枚举写法。
挑战
简单存储一个只能是四个名称之一的方向。
- 编写
type Direction = "up" | "down" | "left" | "right"。 - 声明
local facing: Direction = "left"。 - 打印
facing,然后打印`The player moves {facing}`。
按下 Run Code:“输出”会显示 left 和 The player moves left。
亲手试试
-- 1) 将 Direction 定义为四个字符串的联合类型
-- 2) local facing: Direction = "left"
-- 3) 输出 facing,然后输出句子
Luau 入门中的所有课
自己练习: Luau 在线编译器