Menu
Coddy logo textTech

Анонимные функции

Часть раздела Логика и управление потоком путешествия по Lua на Coddy. Урок 13 из 54.

Теперь, когда вы понимаете, что функции можно сохранять в переменных и передавать, существует ещё более краткий способ их записывать. Вместо того чтобы всегда давать функции имя, вы можете создать её непосредственно там, где она вам нужна. Такие функции называются анонимными.

Анонимная функция — это просто функция без имени. Вы определяете её с помощью ключевого слова function, за которым сразу следуют её параметры и тело:

function(a, b)
    return a + b
end

Это создаёт значение function, которое можно сразу использовать. Анонимные function особенно полезны при передаче function в качестве аргументов другим function. Помните пример пользовательской сортировки из предыдущего материала? Вот как он выглядит с анонимной function:

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(). Это делает код более компактным и сохраняет логику сортировки именно там, где она используется.

challenge icon

Задание

Легко

Напишите функцию filterByThreshold, которая принимает numbers и threshold и возвращает новую таблицу, содержащую только числа, превышающие пороговое значение.

Используйте table.insert() вместе с подходом на основе анонимной функции для фильтрации чисел. Создайте логику фильтрации непосредственно в этом месте, не определяя отдельную именованную функцию.

Логика:

  • Создайте пустую таблицу result
  • Переберите таблицу numbers
  • Для каждого числа используйте анонимную функцию, чтобы проверить, превышает ли оно threshold
  • Если проверка возвращает true, добавьте число в таблицу result
  • Верните отфильтрованную таблицу result

Параметры:

  • numbers (table): Таблица в виде списка, содержащая числовые значения
  • threshold (number): Минимальное значение (не включая его) для фильтрации

Возвращает: Таблицу, содержащую только числа, превышающие threshold (table)

Попробуйте сами

function filterByThreshold(numbers, threshold)
    -- Напишите код здесь
end
quiz iconПроверьте себя

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

Все уроки раздела Логика и управление потоком

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