Функции как объекты первого класса
Часть раздела Логика и управление потоком путешествия по Lua на Coddy. Урок 12 из 54.
В Lua функции — это не просто блоки кода, выполняющие задачи. Это значения, с которыми можно обращаться так же, как с любым другим типом данных. Это означает, что вы можете работать с функциями так же, как с числами, строками или таблицами.
Вы можете сохранить функцию в переменной:
local greet = function()
print("Hello!")
end
greet() -- Вывод: Hello!Здесь function присваивается переменной greet, и вы можете вызывать её так же, как любую обычную функцию. Это открывает широкие возможности для структурирования вашего кода.
Функции также можно передавать в качестве аргументов другим функциям. Это особенно полезно, когда вы хотите, чтобы одна функция использовала поведение, определённое в другой:
function executeAction(action)
action()
end
local sayHello = function()
print("Hello from a function!")
end
executeAction(sayHello) -- Вывод: Hello from a function!В этом примере executeAction получает функцию в качестве параметра и вызывает её. Функция sayHello передаётся так же, как вы передали бы число или строку.
Функции могут даже возвращать другие функции. Это позволяет динамически создавать функции на основе определённых условий или параметров:
function createMultiplier(factor)
return function(number)
return number * factor
end
end
local double = createMultiplier(2)
print(double(5)) -- Вывод: 10Задание
ЛегкоНапишите функцию applyOperation, которая принимает a, b и operation и возвращает результат применения функции operation к двум числам.
Параметр operation представляет собой таблицу, содержащую функцию, которая будет вызвана с аргументами a и b.
Логика:
- Извлеките функцию из таблицы
operation, используя ключ"func" - Вызовите эту функцию с аргументами
aиb - Верните результат
Параметры:
a(number): Первое числоb(number): Второе числоoperation(table): Таблица, содержащая функцию, сохранённую по ключу"func"
Возвращает: Результат вызова функции operation с a и b (number)
Попробуйте сами
function applyOperation(a, b, operation)
-- Напишите код здесь
end
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов3Продвинутые концепции функций
Возврат нескольких значенийВариативные функции (...)Функции как объекты первого классаАнонимные функцииЧто такое замыкание?Итоги — простой обработчик событийПотренируйтесь самостоятельно: Онлайн-компилятор Lua