Menu
CoddyTech

字面量类型

本课属于 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 替代其他语言枚举的方式,你会在后面的章中看到。

challenge icon

挑战

简单

只允许使用四个确切的方向名称。

  1. 编写 type Direction = "north" | "south" | "east" | "west"。
  2. 编写 local function movePlayer(direction: Direction): string,使其返回 `Moving {direction}`。
  3. 声明 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 在线编译器