Menu
Coddy logo textTech

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

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

Дженерики становятся действительно полезными, когда дело доходит до таблиц. Вы уже записываете типизированные массивы как {number} или {string} — внутри обобщенной функции тип элемента может быть просто T, а {T} означает "массив из того, чем окажется T".

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

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

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

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

challenge icon

Задание

Легко

Создайте обобщенную функцию (generic function) с именем 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