Функции с переменным числом аргументов
Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 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
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции без возвращаемого значенияНеобязательные параметрыЗначения параметров по умолчаниюЗначения по умолчанию для булевых параметровФункции с переменным числом аргументовОпределение типов функцийПовторение: типизированные функции2Основные типы
Число, строка и булево значениеТип 'any': запасной выходТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовПовторение: практика с основными типами5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: массивы и отображения
Типизированные массивыДобавление и чтение элементовЧто такое тип отображения?Объявление и доступ к отображениямПеребор таблицТаблицы смешанной структурыЧтение сеткиСоздание сеткиtable.unpackПовторение: массивы и отображенияПотренируйтесь самостоятельно: Онлайн-компилятор Luau