Menu
CoddyTech

将字符串枚举表示为联合类型

本课属于 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 代码中首选的枚举写法。

challenge icon

挑战

简单

存储一个只能是四个名称之一的方向。

  1. 编写 type Direction = "up" | "down" | "left" | "right"。
  2. 声明 local facing: Direction = "left"。
  3. 打印 facing,然后打印 `The player moves {facing}`。

按下 Run Code:“输出”会显示 left 和 The player moves left。

亲手试试

-- 1) 将 Direction 定义为四个字符串的联合类型
-- 2) local facing: Direction = "left"
-- 3) 输出 facing,然后输出句子

Luau 入门中的所有课

自己练习: Luau 在线编译器