泛型恒等函数
本课属于 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。
挑战
简单编写一个函数,让它返回任意值并保留其类型。
- 编写
local function identity<T>(value: T): T,让它返回value。 - 声明
local luckyNumber: number = identity(7)和local greeting: string = identity("Hello, Luau!")。 - 先打印
luckyNumber,再打印greeting。
按“运行代码”:输出会显示 7 和 Hello, Luau!。
亲手试试
-- 1) identity<T>(value: T): T
-- 2) 通过调用 identity 得到 luckyNumber 和 greeting
-- 3) 打印这两个值
Luau 入门中的所有课
自己练习: Luau 在线编译器