Menu
CoddyTech

泛型数组

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

涉及表格时,泛型就非常实用。你已经会把类型化数组写成 {number} 或 {string}。在泛型函数中,元素类型可以直接写成 T,而 {T} 表示“由 T 决定类型的数组”。

来看一个经典示例:获取任意数组的第一个元素:

local function first<T>(items: {T}): T?
    return items[1]
end

传入一个 {string},检查器就会推断出 T = string,因此结果是字符串。传入一个 {number},结果就是数字。一个函数就能替代一整组针对不同类型编写的函数。

仔细看看返回类型:它是 T?,而不是 T。数组可能为空,这时 items[1] 就是 nil:你之前学过的可选类型会如实表示这一点:“一个 T,或者 nil”。在使用结果之前,检查器会提醒调用者处理 nil 的情况,这正是你希望类型化语言帮你捕获的错误。

challenge icon

挑战

简单

获取任意数组的第一个元素。

  1. 编写 local function first<T>(items: {T}): T?,使其返回 items[1]。
  2. 声明 local fruits: {string} = {"apple", "banana"} 和 local empty: {number} = {}。
  3. 先打印 first(fruits),再打印 first(empty)。

按下 运行代码:输出会显示 apple 和 nil。

亲手试试

-- 1)first<T>(items: {T}): T?
-- 2)fruits: {string} 和一个空的 {number}
-- 3)输出每个集合的第一个元素

Luau 入门中的所有课

自己练习: Luau 在线编译器