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

Задание

Легко

Создайте обобщенную функцию с именем 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 с "<code>generics" непосредственно внутри print
  5. результат вызова identity с 99 непосредственно внутри print

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

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

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

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

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