字面量类型
本课属于 Coddy Lua 学习旅程的“Luau 入门”单元。第 35 课,共 80 课。
像 string 这样的类型允许使用任意字符串,但有时只有少数几个确切的值才有意义。字面量类型直接使用值本身作为类型:
local mode: "dark" = "dark" -- 只允许字符串 "dark"
local locked: true = true -- 只允许布尔值 true单独使用时,单值类型只是个新奇的概念。与联合类型结合后,它们就成了 Luau 最实用的工具之一:严格限定允许使用的值:
type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"
local move: Direction = "north" -- ✓
local state: GameState = "playing" -- ✓
-- local bad: Direction = "diagonal" -- ✗ 类型错误!这样一来,像 "nort" 这样的拼写错误,或像 "diagonal" 这样的无效值,都会在你编辑代码时被发现。如果使用普通的 string,这些错误就会蒙混过关,直到运行时才导致问题,而且你还得足够幸运才能发现。
字面量类型区分大小写且要求完全匹配:"North" 与 "north" 不匹配。字符串字面量最常见,但布尔值字面量和数字字面量(在较新的 Luau 版本中)也以相同的方式工作。这种由字符串字面量组成的联合类型,也是 Luau 替代其他语言枚举的方式,你会在后面的章中看到。
挑战
简单只允许使用四个确切的方向名称。
- 编写
type Direction = "north" | "south" | "east" | "west"。 - 编写
local function movePlayer(direction: Direction): string,使其返回`Moving {direction}`。 - 声明
local playerDirection: Direction = "east",并打印movePlayer(playerDirection)。
按下运行代码:输出会显示 Moving east。
亲手试试
-- 1) type Direction = "north" | "south" | "east" | "west"
-- 2) movePlayer(direction: Direction): string
-- 3) local playerDirection: Direction = "east",然后输出移动结果
Luau 入门中的所有课
自己练习: Luau 在线编译器