Таблицы с функциями
Часть раздела 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.
Задание
ЛегкоСоздайте таблицу с именем calculator, которая содержит четыре арифметические функции:
add(a, b)- возвращает суммуaиbsubtract(a, b)- возвращаетaминусbmultiply(a, b)- возвращает произведениеaиbdivide(a, b)- возвращаетa, деленное наb
Вы получите три входных значения:
- Название операции (одно из:
add,subtract,multiply,divide) - Первое число
- Второе число
Вызовите соответствующую функцию из вашей таблицы 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, используя имя операции
-- и выведите результатВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Object Oriented Programming
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур