Menu
Coddy logo textTech

Использование обобщенной функции

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

Ты никогда не сообщаешь identity, чем является T: проверяющий определяет это самостоятельно. Это вывод типов: в каждой точке вызова Luau смотрит на аргумент и решает, чему равно T:

local word = identity("Luau")   -- T выведен как string
local count = identity(12)      -- T выведен как number
local flag = identity(false)    -- T выведен как boolean

Каждый вызов независим: T может быть строкой в одной строке и числом в следующей. Выведенный результат так же безопасен, как аннотация, написанная вручную: для проверяющего word является string, с полной поддержкой автодополнения и проверки ошибок.

Одно важное отличие от TypeScript: TS позволяет принудительно указать тип в точке вызова с помощью identity<number>(5). В Luau нет аргументов типа в точке вызова. Эта строка не является специальным синтаксисом, поэтому Luau воспринимает угловые скобки как сравнения «меньше»/«больше», и код завершается ошибкой. Если ты хочешь явно указать тип, вместо этого аннотируй переменную:

local count: number = identity(12)

Ты можешь наблюдать за работой вывода типов с помощью знакомого инструмента: typeof возвращает имя типа значения во время выполнения, поэтому print(typeof(identity(12))) выводит number: значение прошло через обобщённую функцию совершенно неизменённым.

challenge icon

Задание

Легко

Универсальная функция identity из предыдущего урока уже находится в вашем редакторе. Задействуйте её выведение типов.

Создайте три переменные, позволив проверяющему вывести T (аннотации не нужны):

  • word: вызовите identity со значением "Luau"
  • count: вызовите identity со значением 12
  • flag: вызовите identity со значением false

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

  1. word
  2. результат typeof(word)
  3. count
  4. результат typeof(count)
  5. flag
  6. результат typeof(flag)

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

-- Обобщённая функция identity из предыдущего урока
local function identity<T>(value: T): T
    return value
end

-- Напишите код здесь
-- 1) создайте word, count и flag с вызовами identity (пусть T выводится)
-- 2) выведите каждое значение, за которым следует его typeof
quiz iconПроверьте себя

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

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

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