Menu
Coddy logo textTech

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

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

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

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

Задание

Легко

Создайте generic-функцию с именем identity, которая:

  • объявляет параметр типа T
  • принимает один параметр с именем value типа T
  • возвращает это значение с типом возвращаемого значения T

Затем создайте следующие типизированные переменные, используя вашу функцию:

  • luckyNumber типа number — вызовите identity с 7
  • greeting типа string — вызовите identity с "Hello, Luau!"
  • isReady типа boolean — вызовите identity с true

Выведите на экран следующее, каждое с отдельной строки:

  1. luckyNumber
  2. greeting
  3. isReady
  4. результат вызова identity с "generics" прямо внутри print
  5. результат вызова identity с 99 прямо внутри print

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

-- Напишите код здесь
-- 1) определите identity<T>(value: T): T
-- 2) создайте luckyNumber, greeting и isReady с вызовами identity
-- 3) выведите их, затем выведите identity("generics") и identity(99)
quiz iconПроверьте себя

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

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