可变参数函数
本课属于 Coddy Lua 学习旅程的“Luau 入门”单元。第 29 课,共 80 课。
你已经使用 Lua 的 ...(可变参数)编写了可以接受任意数量参数的函数。Luau 允许你为可变参数指定类型,这样传入的每个参数都会经过检查:
function sum(...: number): number
local total = 0
for _, n in ipairs({...}) do
total = total + n
end
return total
end
print(sum(1, 2)) -- 3
print(sum(1, 2, 3, 4, 5)) -- 15...: number 声明了每个额外参数都必须是数字:sum(1, "two") 会导致类型错误。你熟悉的运行时工具包括:
{...}会将可变参数收集到一个数组中(此处为{number})select("#", ...)会统计传入了多少个参数...可以直接传递给另一个函数,例如math.max(...)
和 Lua 一样,... 必须是最后一个参数:常规(有类型的)参数放在前面,可变参数部分则收集其余参数:
function joinWords(separator: string, ...: string): string
return table.concat({...}, separator)
end
print(joinWords("-", "a", "b", "c")) -- a-b-c挑战
简单编写两个可以接收任意数量参数的函数。
- 编写
local function sumAll(...: number): number,使用ipairs将{...}中的值相加。 - 编写
local function joinWords(separator: string, ...: string): string,返回table.concat({...}, separator)。 - 打印
sumAll(5, 10, 15)和joinWords("-", "apple", "banana", "cherry")。
按下运行代码:输出会显示 30 和 apple-banana-cherry。
亲手试试
-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) 打印这两个结果
Luau 入门中的所有课
自己练习: Luau 在线编译器