Menu
Coddy logo textTech

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

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

В Lua функции являются значениями: ты сохранял их в переменных и передавал их: local f = function(x) return x * 2 end. Эти анонимные function (выражения expression) принимают аннотации типов точно так же, как и именованные функции:

local double = function(x: number): number
    return x * 2
end

local shout = function(text: string): string
    return string.upper(text) .. "!"
end

Параметры получают name: type внутри скобок, а тип возвращаемого значения указывается после закрывающей скобки: единственное отличие от именованной функции заключается в том, что ключевое слово function не имеет имени, а всё expression присваивается переменной.

Если ты знаком с JavaScript или TypeScript, обрати внимание: в Luau нет стрелочных функций. Синтаксиса => не существует. Каждое expression функции записывается с помощью function ... end — в длинной или короткой форме.

После присваивания ты вызываешь его через переменную, как любую функцию: double(21) возвращает 42, а проверяющий инструмент проверяет каждый вызов на соответствие написанным тобой аннотациям.

challenge icon

Задание

Легко

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

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

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