Menu
CoddyTech

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

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

Обобщённые типы становятся действительно полезными, когда речь заходит о таблицах. Вы уже записываете типизированные массивы как {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

Задание

Легко

Получите первый элемент любого массива.

  1. Напишите local function first<T>(items: {T}): T?, которая возвращает items[1].
  2. Объявите local fruits: {string} = {"apple", "banana"} и local empty: {number} = {}.
  3. Выведите first(fruits), затем first(empty).

Нажмите «Запустить код»: в выводе появятся apple и nil.

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

-- 1) first<T>(items: {T}): T?
-- 2) fruits: {string} и пустой {number}
-- 3) выведи первый элемент каждого

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

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