Menu
Coddy logo textTech

Обобщенные массивы

Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 60 из 73.

Обобщения становятся действительно полезными, когда в дело вступают таблицы. Вы уже записываете типизированные массивы как {number} или {string}. Внутри обобщённой function тип element может быть просто T, а {T} означает «массив любого типа, которым в итоге окажется T».

Вот классический пример: получение first element любого массива:

local function first<T>(items: {T}): T?
    return items[1]
end

Передайте {string}, и проверяющий выводит, что T = string, поэтому результатом будет строка. Передайте {number}, и результатом будет число. Одна function заменяет целое семейство копий для каждого типа.

Внимательно посмотрите на тип возвращаемого значения: это T?, а не T. Массив может быть пустым, и тогда items[1] равен nil: тип optional, с которым вы познакомились ранее, честно сообщает: «T или nil». Проверяющий подтолкнёт вызывающий код обработать случай nil перед использованием результата — именно такое выявление ошибок и нужно от типизированного языка.

challenge icon

Задание

Легко

Создайте обобщённую функцию с именем first, которая:

  • объявляет параметр типа T
  • принимает один параметр с именем items типа {T}
  • возвращает первый элемент с возвращаемым типом T? (для пустого массива это nil)

Создайте следующие типизированные массивы:

  • fruits типа {string} со значениями "apple", "banana", "cherry"
  • scores типа {number} со значениями 10, 20, 30, 40
  • flags типа {boolean} со значениями false, true
  • empty типа {string} без элементов

Выведите результат вызова first для каждого массива в этом порядке, каждый результат — на отдельной строке.

Попробуйте сами

-- Напишите код здесь
-- 1) определите first<T>(items: {T}): T? возвращающую items[1]
-- 2) создайте fruits: {string}, scores: {number}, flags: {boolean},
--    и пустой массив {string}
-- 3) выведите first(...) каждого массива в этом порядке
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в Luau

Потренируйтесь самостоятельно: Онлайн-компилятор Lua