Menu
CoddyTech

Обобщенная функция тождественности

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

Вот как должна выглядеть правильно написанная функция тождества — обобщённая функция:

local function identity<T>(value: T): T
    return value
end

<T> после имени функции объявляет параметр типа: заполнитель, означающий «некоторый тип, определяемый при каждом вызове». В сигнатуре ты используешь T точно так же, как настоящий тип: параметр имеет тип T, и функция возвращает значение типа T.

Весь секрет в том, чтобы использовать один и тот же T для входного и выходного значения. Это связывает их. Вызови identity("hello"), и проверка типов определит для этого вызова T = string, поэтому результат будет иметь тип string. Вызови identity(42), и T = number, поэтому результат будет иметь тип number. Одна реализация, любой тип — ничего не теряется.

T — всего лишь общепринятое имя (сокращение от «Type», то есть «тип»): <Item> или <Value> подойдут так же хорошо. И, как всегда в Luau, угловые скобки нужны только для проверки типов: во время выполнения это обычная функция Lua function identity(value) return value end.

challenge icon

Задание

Легко

Напиши одну функцию, которая возвращает любое значение, сохраняя его тип.

  1. Напиши local function identity<T>(value: T): T, которая возвращает value.
  2. Объяви local luckyNumber: number = identity(7) и local greeting: string = identity("Hello, Luau!").
  3. Выведи luckyNumber, затем greeting.

Нажми «Выполнить код»: вывод содержит 7 и Hello, Luau!.

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

-- 1) identity<T>(value: T): T
-- 2) luckyNumber и greeting из вызовов identity
-- 3) выведите оба значения

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

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