Menu
Coddy logo textTech

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

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

Вот правильно реализованная функция identity — как generic function:

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

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

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

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

challenge icon

Задание

Легко

Create generic function named identity, которая:

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

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

  • luckyNumber типа number: call identity с 7
  • greeting типа string: call identity с "Hello, Luau!"
  • isReady типа boolean: call identity с true

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

  1. luckyNumber
  2. greeting
  3. isReady
  4. result вызова identity с "<code>generics" непосредственно внутри print
  5. result вызова identity с 99 непосредственно внутри print

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

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

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

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

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