Menu
CoddyTech

泛型恒等函数

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

下面是正确实现的 identity 函数,它是一个泛型函数:

local function identity<T>(value: T): T
    return value
end

函数名后面的 <T> 声明了一个类型参数:一个占位符,表示“每次调用时确定的某种类型”。在函数签名中,你可以像使用真实类型一样使用 T:参数的类型是 T,函数返回的也是 T。

让输入和输出使用相同的 T,正是关键所在。这会将它们关联起来。调用 identity("hello") 时,检查器会为这次调用确定 T = string,因此结果是一个 string。调用 identity(42) 时,T = number,因此结果是一个 number。同一个函数体适用于各种类型,不会丢失任何信息。

T 只是一个约定俗成的名称(是“Type”的缩写):<Item> 或 <Value> 也同样适用。和 Luau 中的一贯情况一样,尖括号只供检查器使用:在运行时,这只是普通的 Lua 函数 function identity(value) return value end。

challenge icon

挑战

简单

编写一个函数,让它返回任意值并保留其类型。

  1. 编写 local function identity<T>(value: T): T,让它返回 value。
  2. 声明 local luckyNumber: number = identity(7) 和 local greeting: string = identity("Hello, Luau!")。
  3. 先打印 luckyNumber,再打印 greeting。

按“运行代码”:输出会显示 7 和 Hello, Luau!。

亲手试试

-- 1) identity<T>(value: T): T
-- 2) 通过调用 identity 得到 luckyNumber 和 greeting
-- 3) 打印这两个值

Luau 入门中的所有课

自己练习: Luau 在线编译器