Анонимные функции
Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 13 из 54.
Теперь, когда вы понимаете, что функции можно сохранять в переменных и передавать их, существует еще более лаконичный способ их написания. Вместо того чтобы всегда давать функции имя, вы можете создать ее прямо там, где она вам нужна — такие функции называются анонимными.
Анонимная функция — это просто функция без имени. Вы определяете её с помощью ключевого слова function, за которым сразу следуют её параметры и тело:
function(a, b)
return a + b
endЭто создает значение функции, которое можно использовать сразу же. Анонимные функции особенно полезны при передаче функций в качестве аргументов другим функциям. Помните пример с пользовательской сортировкой, который мы рассматривали ранее? Вот как это выглядит с анонимной функцией:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Вместо того чтобы определять отдельную именованную функцию для сравнения, функция создается непосредственно в качестве второго аргумента table.sort(). Это делает код более компактным и сохраняет логику сортировки именно там, где она используется.
Задание
ЛегкоНапишите функцию filterByThreshold, которая принимает numbers и threshold и возвращает новую таблицу, содержащую только числа, превышающие пороговое значение.
Используйте table.insert() с подходом на основе анонимной функции для фильтрации чисел. Создайте логику фильтрации внутри кода, не определяя отдельную именованную функцию.
Логика:
- Создайте пустую результирующую таблицу
- Переберите таблицу numbers
- Для каждого числа используйте анонимную функцию, чтобы проверить, превышает ли оно порог
- Если проверка возвращает true, добавьте число в результирующую таблицу
- Верните отфильтрованную результирующую таблицу
Параметры:
numbers(table): Таблица в виде списка, содержащая числовые значенияthreshold(number): Минимальное значение (не включая его) для фильтрации
Возвращает: Таблицу, содержащую только числа больше порогового значения (table)
Шпаргалка
Анонимная функция — это функция без имени, определяемая с помощью ключевого слова function, за которым следуют параметры и тело:
function(a, b)
return a + b
endАнонимные функции полезны при передаче функций в качестве аргументов, позволяя описывать логику непосредственно там, где она используется:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Это создает функцию сравнения непосредственно в качестве аргумента для table.sort(), делая код более компактным.
Попробуйте сами
function filterByThreshold(numbers, threshold)
-- Напишите код здесь
end
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов3Продвинутые концепции функций
Возврат нескольких значенийВариативные функции (...)Функции как объекты первого классаАнонимные функцииЧто такое замыкание?Итоги — простой обработчик событий