Menu
Coddy logo textTech

Типизация анонимных функций

Часть раздела Введение в 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, а средство проверки проверяет каждый вызов на соответствие написанным вами аннотациям.

challenge icon

Задание

Легко

Перепишите эту именованную функцию как анонимную функцию, сохраненную в локальную переменную, сохранив все аннотации типов:

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)

Вызовите и выведите на экран результат каждой функции, каждый с новой строки:

  1. subtract(10, 3)
  2. createMessage("Hello World")
  3. isPositive(-5)
  4. 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
-- затем выведите четыре результата
quiz iconПроверьте себя

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

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