Типизация анонимных функций
Часть раздела Введение в Luau путешествия по Lua на Coddy — урок 23 из 73.
В Lua функции являются значениями — вы уже сохраняли их в переменные и передавали их: local f = function(x) return x * 2 end. Эти анонимные функции (функциональные выражения) принимают аннотации типов точно так же, как и именованные функции:
local double = function(x: number): number
return x * 2
end
local shout = function(text: string): string
return string.upper(text) .. "!"
endПараметры получают name: type внутри скобок, а возвращаемый тип идет после закрывающей скобки — единственное отличие от именованной функции заключается в том, что у ключевого слова function нет имени, и всё выражение присваивается переменной.
Если вы знакомы с JavaScript или TypeScript, обратите внимание, что в Luau нет стрелочных функций — синтаксис => отсутствует. Каждое функциональное выражение записывается с помощью function ... end, независимо от его длины.
После присвоения вы вызываете её через переменную, как и любую функцию: double(21) возвращает 42, а средство проверки проверяет каждый вызов на соответствие написанным вами аннотациям.
Задание
ЛегкоПерепишите эту именованную функцию как анонимную функцию, сохраненную в локальную переменную, сохранив все аннотации типов:
function subtract(a: number, b: number): number
return a - b
endТо есть: создайте local subtract = function(...) ... end с теми же типами параметров и возвращаемого значения.
Затем создайте еще две типизированные анонимные функции:
createMessage— принимаетtext: string, возвращает строку"Message: [text]"(тип возвращаемого значенияstring)isPositive— принимаетnum: number, возвращаетtrue, если число больше 0, иначеfalse(тип возвращаемого значенияboolean)
Вызовите и выведите на экран результат каждой функции, каждый с новой строки:
subtract(10, 3)createMessage("Hello World")isPositive(-5)isPositive(8)
Попробуйте сами
-- Напишите код здесь
-- local subtract = function(a: number, b: number): number ... end
-- local createMessage = function(text: string): string ... end
-- local isPositive = function(num: number): boolean ... end
-- затем выведите четыре результата
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции, ничего не возвращающиеНеобязательные параметрыЗначения параметров по умолчаниюФункции с переменным числом аргументовОпределение типов функцийИтоги: типизированные функции2Базовые типы
Основные типы: num, str, boolТип 'any': лазейка в типизацииТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовИтоги: практика по базовым типам5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: Массивы и Map-словари
Типизированные массивыДобавление и чтение элементовЧто такое тип Map?Объявление и доступ к Map-словарямИтерация по таблицамТаблицы смешанной формыМногомерные типизированные массивыtable.unpack и VarargsИтоги: Массивы и Map-словари