Menu
Coddy logo textTech

Таблицы с функциями

Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 1 из 70.

В Lua таблицы невероятно универсальны. Помимо хранения данных, они также могут содержать функции. Это позволяет группировать связанные операции вместе, сохраняя ваш код организованным и простым в управлении.

Чтобы поместить функцию в таблицу, вы просто присваиваете её ключу, как и любое другое значение:

local myTable = {
    greet = function(name)
        return "Hello, " .. name
    end
}

print(myTable.greet("Alice"))  -- Вывод: Hello, Alice

Вы также можете определить функцию отдельно, а затем добавить её в таблицу:

local myTable = {}

myTable.greet = function(name)
    return "Hello, " .. name
end

Или используйте этот более лаконичный сокращенный синтаксис:

local myTable = {}

function myTable.greet(name)
    return "Hello, " .. name
end

Все три подхода дают одинаковый результат. Вы вызываете функцию, используя точечную нотацию: myTable.greet("Alice"). Этот паттерн объединения функций с данными является основой объектно-ориентированного программирования в Lua.

challenge icon

Задание

Легко

Создайте таблицу с именем calculator, которая содержит четыре арифметические функции:

  • add(a, b) - возвращает сумму a и b
  • subtract(a, b) - возвращает a минус b
  • multiply(a, b) - возвращает произведение a и b
  • divide(a, b) - возвращает a, деленное на b

Вы получите три входных значения:

  1. Название операции (одно из: add, subtract, multiply, divide)
  2. Первое число
  3. Второе число

Вызовите соответствующую функцию из вашей таблицы calculator на основе названия операции и выведите результат.

Шпаргалка

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

local myTable = {
    greet = function(name)
        return "Hello, " .. name
    end
}

print(myTable.greet("Alice"))  -- Вывод: Hello, Alice

Вы также можете определять функции отдельно и добавлять их в таблицу:

local myTable = {}

myTable.greet = function(name)
    return "Hello, " .. name
end

Или используйте сокращенный синтаксис:

local myTable = {}

function myTable.greet(name)
    return "Hello, " .. name
end

Вызывайте функции таблицы, используя точечную нотацию: myTable.greet("Alice")

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

-- Чтение входных данных
local operation = io.read()
local num1 = tonumber(io.read())
local num2 = tonumber(io.read())

-- TODO: Создайте таблицу calculator с четырьмя функциями:
-- add(a, b), subtract(a, b), multiply(a, b), divide(a, b)


-- TODO: Вызовите соответствующую функцию из таблицы calculator, используя имя операции
-- и выведите результат
quiz iconПроверьте себя

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

Все уроки раздела Object Oriented Programming