Menu
CoddyTech

联合类型

本课属于 Coddy Lua 学习旅程的“Luau 入门”单元。第 33 课,共 80 课。

有时一种类型还不够。用户 ID 可能以 "user123" 的形式出现,或以 42 的形式出现。在普通 Lua 中,你只能祈祷一切顺利;Luau 则提供了联合类型:竖线 | 表示“或”:

local userId: number | string

userId = "user123"  -- ✓ 可以是字符串
userId = 42          -- ✓ 可以是数字
userId = true        -- ✗ 类型错误:联合类型中不包含 boolean

变量可以保存联合类型中的任意一个成员,只能保存这些成员。这正是它与 any 的关键区别:联合类型会严格限制允许的值,同时又能提供你需要的灵活性。

联合类型对接受多种输入格式的函数参数尤其有用:

function printId(id: number | string): ()
    print(id)
end

printId(42)          -- 可以传入数字
printId("user123")   -- 可以传入字符串

你已经认识 string? 了。那就是你的第一个联合类型!它只是 string | nil 的简写。下一课,你将学习如何在获得联合类型的值后,安全地使用它。

challenge icon

挑战

简单

接受一个值,该值可以是数字或字符串。

  1. 编写 local function printId(id: number | string): (),用于打印 id。
  2. 声明 local status: string | number = "active"。
  3. 调用 printId(7) 和 printId("player7"),然后将 status 设为 200 并打印它。

点击运行代码:输出会显示 7、player7 和 200。

亲手试试

-- 1) printId(id: number | string): ()
-- 2) local status: string | number = "active"
-- 3) 调用 printId(7) 和 printId("player7"),将 status 设为 200,然后打印它

Luau 入门中的所有课

自己练习: Luau 在线编译器