Menu
CoddyTech

可变参数函数

本课属于 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
challenge icon

挑战

简单

编写两个可以接收任意数量参数的函数。

  1. 编写 local function sumAll(...: number): number,使用 ipairs 将 {...} 中的值相加。
  2. 编写 local function joinWords(separator: string, ...: string): string,返回 table.concat({...}, separator)。
  3. 打印 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 在线编译器