Menu
Coddy logo textTech

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

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

Вы никогда не указываете identity, чем является T — проверятель типов определяет это самостоятельно. Это и есть вывод типов (type inference): при каждом вызове Luau смотрит на аргумент и находит значение для T:

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

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

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

local count: number = identity(12)

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

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